spring的configuration注解探索
spring的configuration注解探索
本文参考博客(基本摘自以下博客内容)
https://www.jianshu.com/p/81880251a700
https://blog.csdn.net/chjttony/article/category/1239946
1、一个案例
- 配置类
@Configuration//标记这个类为注解类==配置文件
public class UserConfig {
/*
* @Bean代表给容器中注入一个Bean,类型为返回值得类型,id默认是方法名
* id也可以自己定义比如@Bean("user1")
*/
@Bean
public User user() {
User user=new User();
user.setUserName("qiuzhangwei");
user.setPassword("123456");
user.setAge(55);
user.setBrithday(new Date());
return user;
}
}
- 测试类
public class Test {
public static void main(String[] args) {
// 基于注解开发的测试
ConfigurableApplicationContext context2 = new AnnotationConfigApplicationContext
(UserConfig.class);
User user2 = (User) context2.getBean("user");
System.out.println(user2);
}
}
2、相关注解和类说明
- @Configuration
作用于类上,标记这个类为配置类(相当于一个xml配置文件)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
String value() default "";
}
@Bean
作用于方法或者注解类上,表示在config配置类中注入相应的bean类。@Bean给容器注入bean时候,类型为方法的返回类型,默认id是方法名,但是可以通过别名来改变默认id,比如上面例子可以改为@Bean("user1")。
@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;
}
- AnnotationConfigApplicationContext是注解相关的bean容器,相当于xml配置文件对应的ClassPathXmlApplicationContext容器
参考链接:
https://www.jianshu.com/p/81880251a700
https://blog.csdn.net/chjttony/article/category/1239946