【问题标题】:Spring order of @component creation@component 创建的 Spring 顺序
【发布时间】:2015-05-14 18:23:38
【问题描述】:

@Component 类将在 spring 中以什么顺序创建。是 @configuration 注释的类将首先创建吗?我们可以指定创建顺序吗?

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    @Component@Configuration 是不同类型的注解。

    @Component 和类似的注解(@Service@Repository 等)及其 JSR-330 对应项,并允许您使用 <context:component-scan/>@ComponentScan 声明要通过自动扫描拾取的 bean为类注册bean定义,所以大致相当于在XML中用<bean ... />标签声明指定的bean。此 bean 类型将遵守标准代理创建策略。

    @Configuration 注解被设计为 XML 配置文件的替换。要创建 @Configuration 注释 bean,Spring 将始终使用 CGLIB 子类化 @Configuration 注释类,覆盖其 @Bean 注释方法以将其替换为 bean 查找方法,以使单例 bean 仅创建一次。尽管如此,@Configuration 带注释的类仍然能够使用带注释的(@Autowired@Inject 等)字段和属性从容器请求 bean(甚至还有其他 @Configuration 带注释的 bean)。

    现在回答你的问题,你必须用@Configuration 注释类,然后用@ComponentScan(basePackages = { "com.test.*" }) 注释,你不能指定创建顺序。

    【讨论】:

    • 其实@Configuration,就像@Service也是@Component一样,在进行组件扫描时也会被检测到。
    • @Arpit 和 M. Deinum :感谢您的回复。正如Denuim所说,配置也是一个组件,将在组件扫描时检测到。实际上我的要求是我想在配置类中声明我所有的应用程序特定配置数据(通过从属性文件中读取值)并且我想让所有其他组件使用这个配置数据。所以我希望这个配置类总是首先加载,然后是所有其他组件。所以只想再次确认是我们不能指定创建顺序?
    猜你喜欢
    • 2020-07-25
    • 2018-06-26
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2016-06-19
    • 2017-03-12
    相关资源
    最近更新 更多