IoC注解
@Configuration
代表这是一个配置文件,Spring的容器会根据它来生成IoC容器去配置Bean@Bean
代表将initUser方法返回的POJO装配到IoC容器中,而其属性name定义这个Bean的名称,如果没有配置它,则将方法名称"initUser"作为Bean的名称保存到Spring IoC容器中。eg--- @Bean(initMethod = “init”,destroy = “destroy” )-----可以使用注解@Bean来配置自定义初始化和销毁方法。
@Component
是标明哪个类被扫描进入 Spring IoC容器,默认IoC容器就会把类名第一个字母作为小写,其它不变作为Bean的名称放入IoC容器中。 includeFilters是定义满足过滤器(Filter)条件的Bean才去扫描。
excludeFilters则是排除过滤器条件的Bean,他们都需要通过一个注解@Filter去定义,
它有一个type类型,这里可以定义为注解或者正则式等类型。
classes定义注解类,pattern定义正则式类。
eg---- @ComponentScan(basePackages="com.springboot.chapter3.*",excludeFilters = {@Filter(classes = {UserService.class})})
解释:由于加入了excludeFilters的配置,使标注了@Service的类将不被IoC容器扫描注入,这样就可以把UserService类排除到Spring IoC容器中了。
@ComponentScan
是标明采用何种策略去扫描装配Bean。 有一个配置项lazyInit,只可以配置Boolean值,且默认值为false,也就是默认不进行延迟初始化,
因此在默认情况下Spring会对Bean进行实例化和依赖注入对应的属性值。
(有些时候有些Bean会受到变化因素的影响,这时我们倒希望是取出Bean的时候完成初始化和依赖注入,
换句话说就是让那些Bean只是将定义发布到IoC容器而不做实例化和依赖注入,当我们取出来的时候才做初始化和依赖注入等操作。)
@Value
是指定具体的值,使得Spring IoC给予对应的属性注入对应的值。eg--- @Value("1") private Long id;
@AliasFor
首先可以通过配置项basePackages定义扫描的包名,在没有定义的情况下,它只会扫描当前包和其子包下的路径;还可以通过 basePackageClasses定义扫描的类;@Autowired
它会根据属性的类型(by type)找到对应的Bean进行注入。 规则:首先它会根据类型找到对应的Bean,如果对应类型的Bean不是唯一的,那么它会根据其属性名称和Bean的名称进行匹配。 如果匹配得上,就会使用该Bean;如果还无法匹配,就会抛出异常。@Primary
它是一个优先权的注解。当你发现有多个同样类型的Bean时,请优先使用我注入。(通过这个消除歧义性)@Qualifier
它的配置项value需要一个字符串去定义,它将与@Autowired组合在一起,通过类型和名称一起找到Bean。(通过这个消除歧义性)eg--- @Autowired
@Qualifier("dog")
private Animal animal = null; //Animal 有多个实现类,比如:Cat、Dog等
还可以在带参构造函数中使用: public BussinessPerson( @AutoWired @Qualifier("dog") Animal animal ){ .................. };
@PostConstruct
初始化方法@PreDestroy
销毁方法@ConfigurationProperties
在注解中配置的字符串database,将与POJO的属性名称组成属性的全限定名去配置文件里查找,这样就能将对应的属性读入到POJO中。@PropertySource
去定义对应的属性文件,把它加载到Spring的上下文中。eg---- @PropertySource(value={"classpath:jdbc.properties"},ignoreResourceNotFound=true)
value可以配置多个配置文件。使用classpath前缀,意味着去类文件路径下找到属性文件;
ignoreResourceNotFound 则是是否忽略配置文件找不到的问题。默认值为false,也就是没有找到属性文件,就会报错。
@Conditional
它的作用是按照一定的条件进行判断,满足条件给容器注册bean。eg--- @Conditional(DatabaseConditional.class)
配置了类DatabaseConditional,那么这个类就必须实现Condition接口。对于Condition接口则要求实现matches方法。
@Profile({...})
表明一个组件在一个或多个特定profile处于活跃状态时是可以注册的@Profile
可以通过以下任何方式使用:1.在任何直接或间接使用@Component和@Configuration的类上作为一个类型注解使用
2.作为元注解,用于组成自定义构造型注解
3.作为任何@Bean方法的方法级注解
补充:
1.@Service、@Controller都间接使用了@Component
2.元注解(meta-annotation)就是注解类上的注解
如果使用@Profile标记@Configuration类, 如果没有任何的profile符合标准, 则将绕过与该类关联的所有@Bean方法和@Import注解。
profile字符串可以包含简单的profile名称(例如"p1") 或**profile表达式。 **
Profile表达式允许表达更复杂的profile逻辑, 例如"p1&p2" 。
再次补充:
profile表达式支持以下运算符:
1. ! - 逻辑非
2. & - 逻辑并
3. | - 逻辑或
注意: 当多个混用时, 遇事不决加括号
@Profile({"a", "b"})这种用法等同于使用逻辑或 (我猜的)
附上文档地址: @Profile
@ImportResource
通过它可以引入对应的XML文件,用以加载Bean。如有错误请多见谅。
@Profile可以参考文档地址,我整理的比较复杂。