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两种方法读取配置文件