过程来看,整体的配置方式从最初比较“原始”的阶段到现在非常“智能”的阶段,这期间Spring做出的努力是非常巨大的,从XML到自动装配,从Spring到Spring Boot,从@Component到@Configuration以及@Conditional,Spring发展到今日,在越来越好用的同时,也为我们隐藏了诸多的细节,那么今天让我们一起探秘@Component与@Configuration。
public @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; } 可以看到在@Configuration注解中是包含@Component注解的,被@Configuration修饰的类被定义为一个Spring容器(应用上下文) @Configuration就相当于Spring配置文件中的<beans />标签,里面可以配置bean 二、@Bean @...
@Configuration注解里面也是被@Component注解修饰的。 2、bean设置的类属性不同。 如果是 @Configuration 并且属性 proxyBeanMethods 为 true(默认的),则为 full 如果是 @Component @ComponentScan @Import @ImportSource 则为 lite 3、返回bean实例不同。 @Configuration 注解修饰的类,并且该注解中的 proxyBeanMethods...
很多人都用过@Configuration和@Component,但并不一定了解他们的区别,或者所了解到的区别仅限于理论层面,并不知道真实原因,最近本人在学习spring 5.2.x源码,特记录并分享一下。 首先,我们可以看到@Configuration的代码是这样的: 从图中可以看出,@Configuration这个类是加上了@Component注解的,所以姑且认为@Compo...
spring常用注解 @Component 大家都不陌生,用来注解一些公共的服务类。 在springboot 中,@Configuration 进入了大家的视界,此时你有没有一个小小的疑问 “这俩到底有什么具体区别”,本文一个示例完美给出答案。 代码类: import org.springframework.context.annotation.Bean; ...
@Configuration 表示一个类声明了一个或多个@Bean 方法,并且可以由 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求 @Component 表示一个注解类是一个“组件”。当使用基于注解的配置和类路径扫描时,这些类被认为是自动检测的候选对象。 @Configuration 使用@Component 进行元注解,因此@Configuration ...
# 情况复现,@Component与@Configuration区别 原因:容器初始化时调用了Config类的getConfigA()创建了对象ConfigA,初始化configB对象时又调用了Config类的getConfigA()创建了对象ConfigA,创建了两次肯定不相等。 # 真相一句话 当你用@Configuration时,Spring会把这个类用动态代理改造一下,会把@Bean修饰的方法改成 ...
Spring 注解中 @Configuration 和 @Component 的区别总结为一句话就是: @Configuration 中所有带 @Bean 注解的方法都会被动态代理(cglib),因此调用该方法返回的都是同一个实例。而 @Conponent 修饰的类不会被代理,每实例化一次就会创建一个新的对象。
@Configuration image 该注解派生自@Component,和@Component注解有相同的功能 相同点: 可以标识该类实例被Spring-ioc容器管理 类中含有@Bean的方法,可以创建bean 不同点: 如果是由@Configuration注解修饰的类,自身会生成一个cglib代理对象,在通过@Bean方式创建单例对象时,经过增强,会尝试从BeanFactory里返回对象,如果是...
(3) @configuration是通过cglib来代理@bean方法的使用, @component注解并没有。 使用代码比较两者差异: @Configuration public class User { private Long id; private String name; public Long getId() { return new Random().nextLong(); } public void setId(Long id) { this.id = id; } public Stri...