1.简介
@Configuration 标志这是一个配置类 等价于我们的xml配置文件 程序员可以通过@Bean 注解注入bean对象到容器 ,默认是单例注入
2.对比spring xml方式注入
xml方式注入中 我们需要定义一大串的东西才能注入Monster这个对象
3. 使用
/**
* 1. @Configuration 标志这是一个配置类 等价于我们刚刚的xml配置文件
* 2. 程序员可以通过@Bean 注解注入bean对象到容器
*/
@Configuration
public class BeanConfig {
/**
* @Bean :给容器添加组件 就是Monster bean
* monster01 表示注入 bean 在容器中的id
* new Monster 表示注入到容器中的bean的信息
*/
@Bean
public Monster monster01(){
return new Monster(200,"牛魔王",500,"打拳");
}
}
4.别名
如果你想对bean取一个别名 可以在注解@Bean上加上name属性或value属性
public class BeanConfig {
/**
* @Bean :给容器添加组件 就是Monster bean
* monster01 表示注入 bean 在容器中的id
* new Monster 表示注入到容器中的bean的信息
*/
@Bean("monster_aaa")
public Monster monster01(){
return new Monster(200,"牛魔王",500,"打拳");
}
}
5.注意事项
- 当一个类被@Configuration注解,则该类也会被注入到容器中
- 如果你想将注入的bean设置为多例模式(默认单例),设置 @Configuration(proxyBeanMethods = false)
/**
1. (1) (proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的, 是代理方式】
2. (2) (proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的, 是非代理方式】
*/
@Configuration(proxyBeanMethods = false)
public class BeanConfig {
/**
* @Bean :给容器添加组件 就是Monster bean
* monster01 表示注入 bean 在容器中的id
* new Monster 表示注入到容器中的bean的信息
*/
@Bean
public Monster monster01(){
return new Monster(200,"牛魔王",500,"打拳");
}
}
- 用该方式获取多例bean不可以直接使用ioc容器获取bean ,而是需要先获取该类的BeanConfig,然后再通过该类的BeanConfig获取对应的bean对象