@Configuration配置类注解的理解

简介: @Configuration配置类注解的理解

1、配置类相当于一个工厂, 标注@Bean注解的方法相当于工厂方法,该工厂说的是FacotryBean

2、@Bean不支持重载, 如果有多个重载方法, 则只有一个能入选为工厂方法

3、@Configuration默认会为标注的类生成代理对象, 其目的就是为了保证@Bean方法互相调用时仍然能保持单例特性

(1)为啥会保持单例 : 因为给配置类声明代理,就可以增强该类, 在Bean之间用工厂方法互相调用的时候就会判断容器中是否存在该Bean,如果有则不会再创建该Bean了

(2)所以说不能只加@Bean, 需要加上@Configuration

4、@Configuration 中如果含有 BeanFactory 后处理器, 则实例工厂方法会导致 MyConfig 提前创建, 造成其依赖注入失败

(1)主要是Bean工厂后置处理器在Bean后置处理器之前执行顺序导致的

(2)在配置类中, 如果有@Value或@Autowired依赖注入, 和BeanFactory 后处理器, 会导致该配置类 提前创建, 因为Bean工厂后置处理器在Bean后置处理器之前执行, 然后就导致依赖注入失败

(3)解决方法是该用静态(加个static)工厂方法或直接为 @Bean 的方法参数依赖注入, 针对 MapperScanner 可以改用注解方式

5、Spring3.0开始,@Configuration用于定义配置类,定义的配置类可以替换xml文件,一般和@Bean注解联合使用。

@Configuration注解主要标注在某个类上,相当于xml配置文件中的

@Bean注解主要标注在某个方法上,相当于xml配置文件中的

等价于

注意:@Configuration注解的配置类有如下要求:

@Configuration不可以是final类型;

@Configuration不可以是匿名类;

嵌套的configuration必须是静态类。

6、XML跟config配置方式的区别:

基于JavaConfig的配置形式是这样的:
@Configuration
public class MockConfiguration{
  @Bean
  public MockService mockService(){
    return new MockServiceImpl(dependencyService());
  }
  @Bean
  public DependencyService dependencyService(){
    return new DependencyServiceImpl();
  }
}
在XML形式中一般是这样:
<bean id="mockService" class="..MockServiceImpl">
  <propery name ="dependencyService" ref="dependencyService" />
</bean>
<bean id="dependencyService" class="DependencyServiceImpl"></bean>

总结:任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。表达依赖注入关系层面为了表达bean与bean之间的依赖关系


相关文章
|
1月前
|
Java Spring 容器
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
这篇文章讨论了在Spring Boot 3.2.1版本中,同名同类型的bean和@Service注解类之间冲突的问题得到了解决,之前版本中同名bean会相互覆盖,但不会在启动时报错,而在配置文件中设置`spring.main.allow-bean-definition-overriding=true`可以解决这个问题。
86 0
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
|
4月前
|
XML 存储 Java
@Configuration 注解使用及源码解析
@Configuration 注解使用及源码解析
36 4
|
6月前
|
Java 数据库连接 API
SpringBoot【问题 01】借助@PostConstruct解决使用@Component注解的类用@Resource注入Mapper接口为null的问题(原因解析+解决方法)
SpringBoot【问题 01】借助@PostConstruct解决使用@Component注解的类用@Resource注入Mapper接口为null的问题(原因解析+解决方法)
729 0
记一个SpringBoot中属性注入失败的问题Consider defining a bean of type &#39;&#39;&#39; in your configuration...
记一个SpringBoot中属性注入失败的问题Consider defining a bean of type &#39;&#39;&#39; in your configuration...
295 0
|
XML SpringCloudAlibaba Java
Spring注解配置:@Configuration 和 @Component 区别及原理详解
随着`Spring Boot`的盛行,注解配置式开发受到了大家的青睐,从此告别了基于`Spring`开发的繁琐`XML`配置。这里先来提纲挈领的了解一下`Spring`内部对于配置注解的定义,如`@Component、@Configuration、@Bean、@Import`等注解,从功能上来讲,这些注解所负责的功能的确不相同,但是
340 1
|
Java 容器 Spring
Spring基础篇:利用注解将外部Properties属性注入到Bean中的方法
利用注解将外部Properties属性注入到Bean中的方法
169 0
|
XML Java 数据格式
【Spring注解必知必会】深度解析@Configuration注解
【Spring注解必知必会】深度解析@Configuration注解
271 0
【Spring注解必知必会】深度解析@Configuration注解
|
Java Spring 容器
配置类为什么要添加@Configuration注解?(1)
配置类为什么要添加@Configuration注解?(1)
142 0
配置类为什么要添加@Configuration注解?(1)
|
缓存 Java Spring
配置类为什么要添加@Configuration注解?(2)
配置类为什么要添加@Configuration注解?(2)
179 0
配置类为什么要添加@Configuration注解?(2)
|
Java Spring 容器
@Configuration注解
@Configuration注解
162 0