当前位置: 首页 > news >正文

JavaConfig

JavaConfig

配置文件

Xml 和 JavaConfig

  • Spring 使用 Xml 作为容器配置文件
    • 需要写大量配置文件
    • 还要配置各种对象,将使用的对象放到 Spring 容器才能使用
    • 需要了解其他框架配置规则
  • 在 3.0 之后加入 JavaConfig,使用 Java 类做配置文件使用

@Configuration

  • Spring 提供的使用 Java 类配置容器
    • 使用 Java 类作为 xml 配置文件的替代
      • 在类中可创建对象,将对象注入容器
    • 配置 Spring IOC 容器的纯 Java 方法
  • 优点
    1. 可使用面向对象方式:一个配置类可以继承配置类,可以重写方法
    2. 避免繁琐的 xml 配置
  • 使用注解
    • @Configuration
      • 注解类上面,表示该类作为配置文件使用
    • @Bean
      • 声明对象,把对象注入到容器
      • 通过 name 或 value 属性指定对象名
        • 默认对象名是 方法名
/**
 * @Configuration 表示当前类作为配置文件使用
 * 相当于 配置文件
 */
@Configuration
public class Conf {

    /**
     * 创建方法,返回值是对象
     * @Bean 注解将对象注入到 Spring 容器,相当于 <bean></bean> 的作用
     * 默认对象名是方法名,使用注解属性 name 或 value 指定对象名:等价于指定 <bean> 的 id
     * @return 返回对象,注入到容器
     */
    @Bean(name = "demo")
    public Demo getDemo(){
        Demo demo = new Demo();
        demo.setName("李四");
        demo.setAge(18);
        demo.setBirthday(new Date());
        demo.setHobby("篮球");
        return demo;
    }
}

@ImportResource

  • 导入资源配置文件,等同于 xml 文件的 <resources> 标签
  • 注解在类定义上
  • 导入配置文件中的 bean 对象
    • 属性 value、location 作用一样,都是指定配置文件位置
    • 属性为数组类型,多个配置文件可以使用数组添加
@Configuration
@ImportResource({"classpath:applicationContext.xml", "classpath:bean.xml"})
public class Conf {}

@PropertyResource

  • 读取 properties 属性配置文件
    • 例如数据路连接信息的配置文件
  • 实现外部化配置,在程序代码之外提供数据
  • @PropertySource
    • 属性 value 指定配置文件路径,数组类型,可以同时指定多个文件
  • @ComponentScan
    • 该注解类似组件扫描器
      • 扫描通过注解创建的对象
    • 属性 value、basePackages 指定注解所在包
      • 自动找到指定包下的注解并创建对象放到 Spring 容器中
  • @Value
    • 给类中属性赋值
    • ${}:占位符,通过配置文件赋值
@Configuration																// 该类作为配置类使用
@PropertySource(value = "classpath:pro.properties", encoding = "UTF-8")		// 以 UTF-8 编码格式导入外部属性配置文件
@ComponentScan(basePackages = "demo.domain")								// 声明注解扫描,扫描并创建容器对象
public class Conf {}

@Component("demo03")														// 普通Java类,通过注解声明放入容器中
public class Demo03 {
    @Value("${name}") 														// 占位符;引用配置文件中值进行赋值
    private String name;
    @Value("${age}")
    private int age;
    @Autowired
    private Date birthday;
    @Value("${hobby}")
    private String hobby;

简单使用

@Configuration															// 表示当前类作为配置文件使用
@ImportResource("classpath:applicationContext.xml")						// 导入外部资源配置文件中的 bean 对象
@PropertySource(value = "classpath:pro.properties", encoding = "UTF-8")	// 导入外部属性配置文件,指定配置文件路径
@ComponentScan(basePackages = "demo.domain")							// 组件扫描器,扫描注解,创建对象;指定注解所在包
public class Conf {

    /**
     * 创建方法,返回值是对象
     * @Bean 将对象注入到 Spring 容器,相当于 <bean></bean> 作用
     * 默认对象名是方法名,使用注解属性 name 或 value 指定对象名:指定 <bean> 的 id
     * @return 返回对象,注入到容器
     */
    @Bean(name = "demo02")
    public Demo02 getDemo(){
        Demo02 demo = new Demo02();
        demo.setName("张二");
        demo.setAge(19);
        demo.setHobby("rap");
        demo.setBirthday(new Date());
        return demo;
    }

}

相关文章:

  • codeblock图形界面编程(十)文件操作
  • 算法与数据结构【30天】集训营——详解查找章节数据结构(C语言版 第2版)课后习题答案 (20)
  • 对象以死嘛?对象什么时候该死?看这一篇就够了
  • DDoS报告团伙规模
  • Android 注解与注解处理器简述
  • 【C++】STL——vector(万字详解)
  • Rust学习指南(一)安装RUST后台管理框架
  • 车载操作系统汇总
  • 硬件工程师成长之路(10.1)——芯片选型
  • libusb系列-001-libusb简介
  • 基于Nonebot2搭建QQ机器人实战篇(一)
  • git工具基本操作命令
  • Xilinx zynq 7010/7020 GPIO
  • 【ESP32】13.DS18B20温度传感器实验(OneWire和DallasTemperature库)
  • 『 云原生·Docker』Dockerfile是什么?如何使用 Dockerfile文件构建镜像?
  • CSS中外联样式表代表的含义
  • es6
  • JavaScript对象详解
  • JS笔记四:作用域、变量(函数)提升
  • laravel with 查询列表限制条数
  • LeetCode29.两数相除 JavaScript
  • Linux快速复制或删除大量小文件
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Object.assign方法不能实现深复制
  • Objective-C 中关联引用的概念
  • python学习笔记 - ThreadLocal
  • supervisor 永不挂掉的进程 安装以及使用
  • win10下安装mysql5.7
  • 当SetTimeout遇到了字符串
  • 官方解决所有 npm 全局安装权限问题
  • 前端临床手札——文件上传
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何用纯 CSS 创作一个货车 loader
  • # 数据结构
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma 指令
  • $.ajax,axios,fetch三种ajax请求的区别
  • (AngularJS)Angular 控制器之间通信初探
  • (LeetCode) T14. Longest Common Prefix
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)80c52学习之旅-起始篇
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Scala的“=”符号简介
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net mvc总结
  • .net 调用php,php 调用.net com组件 --
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET使用存储过程实现对数据库的增删改查
  • .Net小白的大学四年,内含面经
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法