Spring @Configuration 和 @Component 区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring @Configuration 和 @Component 区别相关的知识,希望对你有一定的参考价值。

参考技术A 1.@Configuration 和 @Component 区别

我们可以看下,其实@Configuration 本质其实是 @Component注解的,因此  <context:component-scan>和@ComponentScan都能处理@Configuration 类

被@Configuration 标记的类必须符合下面几点要求

1.配置类必须是要以类的形式提供,不能是工厂返回的实例,允许生成子类在运行是增强cglib动态代理

2配置类不能是fanl 修饰,不能是匿名类( 任何嵌套的类必须是非本地, 既不能在方法中声明,不能是privater),嵌套的configruation必须是静态类

3.@Bean 方法可能不会返过来创建进一步的配置类 意思就是返回的bean 带有@Configuration.也只是当作普通类来处理。

原理分析待续····························

2.@Configuration 和 @bean

这里@Configuration可以看作是用spring的时候xml里面的<beans>标签

@Bean可以理解为用spring 的时候里面<bean>标签

这两个注解是spring 里面的,并不是spring boot里面的

在spring xml 这种形式的项目的时候 后面都要加上<context:component-scan base-package="com.xxx.xxx"> ,有时候好多注解不起作用, 可能就是这个注解。而在spring boot里面就不一样了, 只要保证main方法的入口在这些的列的上层包就行

Spring--@configuration 和 @Bean

参考:http://wiki.jikexueyuan.com/project/spring/java-based-configuration.html

@Configuration 和 @Bean 注解

带有 @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。@Bean 注解告诉 Spring,一个带有 @Bean 的注解方法将返回一个对象,该对象应该被注册为在 Spring 应用程序上下文中的 bean。最简单可行的 @Configuration 类如下所示:

 1 package org.wzh.di.demo1.congiration;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 @Configuration
 7 public class HelloWorldConfig {
 8     @Bean
 9     public HelloWorld helloWorld() {
10         return new HelloWorld();
11     }
12 }
 1 package org.wzh.di.demo1.congiration;
 2 
 3 public class HelloWorld {
 4 
 5     private String message;
 6 
 7     public String getMessage() {
 8         return message;
 9     }
10 
11     public void setMessage(String message) {
12         this.message = message;
13     }
14 
15 }
 1 package org.wzh.di.demo1.congiration;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5 
 6 public class Test {
 7 
 8     public static void main(String[] args) {
 9         ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
10         HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
11         helloWorld.setMessage("Hello World!");
12         String msg = helloWorld.getMessage();
13         System.out.println(msg);
14     }
15 
16 }

 

也可以加载其他配置类,这里只写用法

 1 package org.wzh.di.demo1.congiration;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 
 5 public class Test2 {
 6 
 7     public static void main(String[] args) {
 8         AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
 9         ctx.register(HelloWorldConfig.class);
10         ctx.refresh();
11         HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
12         helloWorld.setMessage("Hello World 2!");
13         String msg = helloWorld.getMessage();
14         System.out.println(msg);
15     }
16 
17 }

 

以上是关于Spring @Configuration 和 @Component 区别的主要内容,如果未能解决你的问题,请参考以下文章

Spring中@Component和@Configuration的区别

Spring的Java配置方式—@Configuration和@Bean实现Java配置

3.1.1_Spring如何加载和解析@Configuration标签

Spring注解中@Configuration和@Configurable的区别

Spring:使用@Configuration 注释自动装配或“普通”调用?

spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件