@ComponentScan使用@Configuration和@Component创建Beans。交换时这两个注释都可以正常工作。那有什么区别呢?
答案 0 :(得分:18)
@Configuration表示一个类声明了一个或多个@Bean 方法并且可以由Spring容器处理以生成bean 运行时那些bean的定义和服务请求
@Component表示带注释的类是“组件”。这样 在使用时,类被视为自动检测的候选者 基于注释的配置和类路径扫描。
@Configuration因此使用@Component进行元注释 @Configuration类是组件扫描的候选者
你可以在这里看到更多
@Configuration也是一个@Component,但@Component不能像@Cofinguration那样。
答案 1 :(得分:8)
实际上答案还不完整,是吗:
@Component表示带注释的类是“组件”。这样 在使用时,类被视为自动检测的候选者 基于注释的配置和类路径扫描。
但是你可以使用@Component
创建,即MyConfiguration.java类,然后使用@Beans
添加@Configuration
声明。通过这种方式,它看起来像一个配置,主要区别在于带有@Bean
{{1}}注释方法的带注释的类是使用 CGLIB 的代理,它在第一个之后的代码调用中生成从上下文返回bean而不是再次执行方法,并在将@Component与@Bean
答案 2 :(得分:0)
@Configuration -类似于bean.xml,但基于Java的bean配置。这意味着用该注释注释的类是配置bean的地方,它将成为自动检测的候选对象。在此类中,方法使用@Bean注释,该方法返回该类的对象。
示例:
@Configuration
public class ConfigClass {
@Bean
public UserClass getObject() {
return new UserClass();
}
}
@Component -如果未使用@Component标记任何类,则无法自动装配(@Autowire)。这意味着当您要使用注释自动连接任何类时,该类应使用@Component进行注释。
示例:
@Component
public class A { .... }
public class B {
@Autowire
A a;
.....
.....
}
答案 3 :(得分:0)
user_ans
默认情况下与@Component
一起导入。控制器,服务和重新发布是子组件(以及配置)。它们也是自动检测的候选对象。
答案 4 :(得分:-4)
除了reos突出显示的差异。
@Component不能被@Component替换的原因如下:
区别在于如何处理bean间依赖关系。 有关示例的详细说明,请参阅链接: Difference between Configuration and Component