一、@Value
1、普通字符串:@Value("tttest") 直接将字符串赋值给当前字段
2、占位符:@Value("${tttest}") 从环境变量、properties文件找到对应变量值赋给当前字段
3、Spring表达式:@Value("#{tttest}") tttest 表示Bean对象、字符串等。
4、扩展:注释在注解上,
配置文件变量 testport=8080,直接引用时 @Value("${testport}") :
@Value("${testport}")
private String test;
但是多处注释使用该变量,修改变量key时极不方便,可以自定义注释统一收口:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Value("${testport}")//注解并赋值给自定义注解
public @interface Definetestport{
}
赋值:
@Value("${Definetestport}")
private String test;
二、@Autowired
不建议使用 @Bean(autowire=Autowire.BY_NAME/BY_TYPE)
@Autowired更灵活
1、属性注入
@Component
private UserService userService{
@Autowired
private OrderService orderService; //先根据类型,再根据名称找到bean装配。
}
2、方法注入
@Component
private UserService userService{
private OrderService orderService;
@Autowired //装配set方法的入参
public void setOrderService(OrderService orderService){
this.orderService = orderService;
}
}
三、@Bean
1、定义多例bean,自定义注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Bean //定义bean
@Scope("prototype")//定义多例模式
public @interface PrototypeBean{
}
使用
@PrototypeBean
private UserService userService{
return new UserService(); //可以返回多个实例
}
2、@Configuration 和 @Bean使用
@Configuration注解的对象会生成代理对象,去容器中检查类中@Bean注释的对象是否已有;有则直接取容器中的实例。
四、@ComponentScan
@ComponentScan(value="com.test",includeFilters=@ComponentScan.Filters(type=FilterType.ANNOTATION, value= test.class)
public class AppConfig{
}
五、@Conditional 指定条件
1、实现Condition类,重写matches方法
2、注释类/方法上。