Spring中@component和@Configuration到底有什么用
其实一直对@component和@Configuration作用不了解
只是知道@Configuration启动 public static void main(String[] args) {}之后会一直启动,@component用的很少,也不知道在类文件里面用这个注解用什么意思,请问各位是怎么理解,能不能举个例子这两个到底在什么时候用比较好
我查的一下资料如下,但是没太看懂
1、@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
@component
就是实例化你自己的bean,没什么特别的
@Configuration
这个涉及到 spring boot 的自动装载的概念,当你的 bean 不在你 jar 包的扫描目录下时,是没法实例化的给 spring 管理的。
@Configuration 就是用于给你实例化非 jar 中的 bean,但是程序不可能扫描到所有 jar 中的 Configuration 注解,所以就通过
spring.factories
这个配置文件获得 Configuration 类的路径。比如
spring-boot-autoconfigure.jar
这个 jar 中,你就能找到spring.factories
,里面配置了 spring 体系中很多模块的自动配置。这两者貌似无关
打开
@Configuration
的源码你会看到上面带着一个@Component
,其实是是和@Service
类似的注解和
@Component
的区别是,标@Configuration
的类里面的@Bean
方法会被代理,这样就可以通过调用方法获取到bean我认为,Spring对
Annotation
机制的增强太有想法了,Spring中Annotation
是存在'继承'
的,具体可以看AnnotatedElementUtils
。@Configuration
/@Controller
/@Service
/@Repository
都是@Component
,那Spring都可以使用针对@Component
的处理逻辑来处理,这些都会注册成为Bean
。@Controller
/@Service
/@Repository
几乎没有特别的处理,所以就认为是一个平平无奇的Bean
就行了。需要针对标记
@Configuration
的Bean
做处理,Spring借助其强大的扩展机制,利用Bean
生命周期扩展点做特定逻辑就可以了,具体可以看ConfigurationClassPostProcessor
。简单说一下,对标记
@Configuration
的Bean
,ConfigurationClassParser
进行进一步解析,获取关联的Configuration Bean
,然后使用ConfigurationClassBeanDefinitionReader
来进一步加载BeanDefinition
。也就是说标记
@Configuration
,它还是一个Bean
,但是Spring赋予了它配置
的能力,认为这是一个配置Bean
,还可以根据它找找其他的Bean
。