springBoot中Bean注解全解析
@Bean 基础声明
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。
@Bean的基本构成
@Target({
ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {
};
@AliasFor("value")
String[] name() default {
};
/** @deprecated */
@Deprecated
Autowire autowire() default Autowire.NO;
boolean autowireCandidate() default true;
String initMethod() default "";
String destroyMethod() default "(inferred)";
}
@Bean不仅可以作用在方法上,也可以作用在注解类型上,在运行时提供注册。
value: name属性的别名,在不需要其他属性时使用,也就是说value 就是默认值
name: 此bean 的名称,或多个名称,主要的bean的名称加别名。如果未指定,则bean的名称是带注解方法的名称。如果指定了,方法的名称就会忽略,如果没有其他属性声明的话,bean的名称和别名可能通过value属性配置
autowire : 此注解的方法表示自动装配的类型,返回一个Autowire类型的枚举,autowire的默认值为No,默认表示不通过自动装配。
initMethod: 这个可选择的方法在bean实例化的时候调用
InitializationBean接口允许bean在合适的时机通过设置注解的初始化属性从而调用初始化方法,InitializationBean 接口有一个定义好的初始化方法。不推荐使用InitializationBean 来调用其初始化方法,因为它将不必要的代码耦合到Spring
destroyMethod: 方法的可选择名称在调用bean示例在关闭上下文的时候,例如JDBC的close()方法,或者SqlSession的close()方法。DisposableBean 接口的实现允许在bean销毁的时候进行回调调用
@Bean的用法
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名
@Configuration
public class UserConfig {
@Bean(name = "userbean1")
public User getUser1(){
return new User(1, "韩梅梅1", "北京市");
}
}
这个配置就等同于之前在xml里的配置
<bean id="userbean1" class="com.fmj.springboot.model.User"> <property name="id" value="1"></property> <property name="name" value="韩梅梅1"></property> <property name="address" value="北京市"></property> </bean>
@bean 也可以依赖其他任意数量的bean,可以通过方法参数实现依赖,如下
@Configuration
public class UserConfig {
@Bean(name = "userbean1")
public User getUser1(){
return new User(1, "韩梅梅1", "北京市");
}
@Bean(name = "userbean2")
public User setUser2(@Qualifier("userbean1") @Autowired User user){
user.setId(1000);
return user;
}
}
