如何以编程方式在 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 中以编程方式获取当前的活动/默认环境配置文件?

如何在Tomcat上以编程方式自行关闭Spring应用程序

如何在启动时以编程方式禁用 Spring @JmsListener

如何在 Spring 中以编程方式解析属性占位符

如何使用 Spring Security 3.1 以编程方式登录用户

如何以编程方式在 Spring ApplicationContext 中启用“annotation-config”