IoC注解

时间:2020-03-26
本文章向大家介绍IoC注解,主要包括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可以参考文档地址,我整理的比较复杂。

原文地址:https://www.cnblogs.com/miniSimple/p/12577149.html