1.先看下 Bean 注解的内容
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {};
@AliasFor("value")
String[] name() default {};
Autowire autowire() default Autowire.NO;
String initMethod() default "";
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}
Target 中指定了注解的使用范围是METHON 和 ANNOTATION_TYPE,就是限定方法 和 注解上可以使用。
@Target(ElementType.METHOD) //方法 @Target(ElementType.ANNOTATION_TYPE)//注解
value -- bean别名和name是相互依赖关联的,value,name如果都使用的话值必须要一致 name -- bean名称,如果不写会默认为注解的方法名称 autowire -- 自定装配默认是不开启的,建议尽量不要开启,因为自动装配不能装配基本数据类型、字符串、数组等,这是自动装配设计的局限性,以及自动装配不如显示依赖注入精确 Spring引入Autowire(自动装配)机制就是为了解决标签下标签过多的问题,标签过多会引发两个问题:
通过测试类,可以看到这个注解的
/**
* @author liukai
* @data 2019/4/15 21:53.
*/
@Configuration
public class ConfigTest {
@Bean(name = "config_test")
public User user () {
User user = new User();
user.setAuthor("liu big big");
user.setName("刘大大");
return user;
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
ac.register(ConfigTest.class);
ac.refresh();
User user = (User) ac.getBean("config_test");
System.out.println(user.getAuthor());
System.out.println(user.getName());
}
}
结果
liu big big 刘大大