Spring Boot注解使用指南

@Configuration

@Configuration包含了@Component,所以被其注解的类自身也会被纳入到bean容器中,但是纳入的是经过cglib增强的子类(代理类)。

@Configuration标记的类必须符合下面的要求:

  • 配置类必须以类的形式提供(不能是工厂方法返回的实例)。允许通过生成子类在运行时增强(cglib 动态代理),所以配置类不能是 final 类(没法动态代理)。
  • 配置注解通常为了通过 @Bean 注解生成 Spring 容器管理的类,
  • 配置类必须是非local的(即不能在方法中声明,不能是 private)。
  • 任何嵌套配置类都必须声明为static。
  • @Bean方法可能不会反过来创建进一步的配置类(也就是返回的 bean 如果带有 @Configuration,也不会被特殊处理,只会作为普通的 bean)。
@Configuration
public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Map map = ac.getBeansOfType(Test.class);
        System.out.println();
        System.out.println(map);
        System.out.println(map.get("test").getStr() == ac.getBean("getStr")); // true, Test类型在容器中的实例其实是被cglib增强的代理子类,所以行为上和原类是不一样的。
    }
    @Bean
    public String getStr(){
        return "hello";
    }
}

@Primary

用于修改优先权的注解。当发现多个同样类型的Bean时,请优先使用其进行注入,常常和@Component结合使用。

@Qualifier

和@Autowired结合使用,@Autowired是通过类型进行自动装配,这个注解则是通过名字进行装配。

@Lazy

和@Component一起使用,该bean会被惰性初始化。如果和@Configuration一起使用,那么该类所有被@Bean修饰的方法产生的bean都会被惰性初始化。

@Value

注入bean的属性值,支持Spring EL(#{} or ${})。

你可能感兴趣的:(Spring Boot注解使用指南)