Spring中@component和@Configuration到底有什么用

发布于 2022-09-12 23:29:36 字数 568 浏览 13 评论 0

其实一直对@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌路黄昏 2022-09-19 23:29:36

@component
就是实例化你自己的bean,没什么特别的

@Configuration
这个涉及到 spring boot 的自动装载的概念,当你的 bean 不在你 jar 包的扫描目录下时,是没法实例化的给 spring 管理的。
@Configuration 就是用于给你实例化非 jar 中的 bean,但是程序不可能扫描到所有 jar 中的 Configuration 注解,所以就通过 spring.factories 这个配置文件获得 Configuration 类的路径。
比如 spring-boot-autoconfigure.jar 这个 jar 中,你就能找到 spring.factories,里面配置了 spring 体系中很多模块的自动配置。

李白 2022-09-19 23:29:36

只是知道@Configuration启动 public static void main(String[] args) {}之后会一直启动,

这两者貌似无关

打开@Configuration的源码你会看到上面带着一个@Component,其实是是和@Service类似的注解
@Component的区别是,标@Configuration的类里面的@Bean方法会被代理,这样就可以通过调用方法获取到bean

东北女汉子 2022-09-19 23:29:36

我认为,Spring对Annotation机制的增强太有想法了,Spring中Annotation是存在'继承'的,具体可以看AnnotatedElementUtils

@Configuration/@Controller/@Service/@Repository都是@Component,那Spring都可以使用针对@Component的处理逻辑来处理,这些都会注册成为Bean

@Controller/@Service/@Repository几乎没有特别的处理,所以就认为是一个平平无奇的Bean就行了。

需要针对标记@ConfigurationBean做处理,Spring借助其强大的扩展机制,利用Bean生命周期扩展点做特定逻辑就可以了,具体可以看ConfigurationClassPostProcessor

简单说一下,对标记@ConfigurationBeanConfigurationClassParser进行进一步解析,获取关联的Configuration Bean,然后使用ConfigurationClassBeanDefinitionReader来进一步加载BeanDefinition

也就是说标记@Configuration,它还是一个Bean,但是Spring赋予了它配置的能力,认为这是一个配置Bean,还可以根据它找找其他的Bean

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文