如何以编程方式在 Spring ApplicationContext 中启用“annotation-config”
Posted
技术标签:
【中文标题】如何以编程方式在 Spring ApplicationContext 中启用“annotation-config”【英文标题】:How do I programmatically enable "annotation-config" in spring ApplicationContext 【发布时间】:2013-03-01 12:41:59 【问题描述】:通常在 spring 中启用注解(如 @Autowired)是通过将其包含在 spring XML 中来完成的。
<context:annotation-config/>
有没有办法在初始化之前在 ApplicationContext(或实现)上以编程方式执行此操作?
【问题讨论】:
【参考方案1】:只需在@Configuration 类中使用AnnotationConfigApplicationContext 类就足够了。基于 java 的容器配置不依赖于以任何方式进行组件扫描。它只是基于 XML 的组件配置的一种不同方法。
浏览这些链接:
coderanch
Spring annotations - @Configuration to invoke spring bean auto-building
【讨论】:
【参考方案2】:我为此付出了很多努力,作为一种解决方法,我创建了一个简单的 spring-aspect-config.xml 文件,其中包含以下内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:spring-configured/>
并将其作为导入添加到我的应用程序上下文类
@ImportResource("classpath:spring-aspect-config.xml")
您可以通过指定以编程方式执行相同的操作
@EnableSpringConfigured
在您的应用程序上下文类上。
参考 - https://jira.springsource.org/browse/SPR-7888
【讨论】:
【参考方案3】:如果你真的需要这个 hack,你可以查看 AnnotationConfigBeanDefinitionParser.parse()
来检查它如何操作上下文以及它注册了什么样的 bean 定义,然后尝试使用 ApplicationContext 实现以编程方式重现它以达到相同的效果.
This post 可能有助于如何将新的 bean 定义添加到 bean 注册表。
【讨论】:
以上是关于如何以编程方式在 Spring ApplicationContext 中启用“annotation-config”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?
如何在启动时以编程方式禁用 Spring @JmsListener