【问题标题】:Spring 3, risks of configurable annotation for injecting beans in un-managed classes?Spring 3,在非托管类中注入 bean 的可配置注释的风险?
【发布时间】:2016-04-01 23:22:11
【问题描述】:

我有一个用作 Rest API 的 Spring 3 项目,并且想将我拥有的 Spring bean 连接到一个非托管类中以用于日志记录。

在尝试了许多不同的事情之后,有效的方法是使用注释 @Configurable 标记我的非托管类。

喜欢:

@Configurable
public class ClassNotManagedBySpring {
     @Autowired
     @Qualifier("myBean")
     private MyBean myBean;
}

@Service("myBean")
public class MyBean {
     @Autowired
     @Qualifier("someOtherBean")
     private SomeOtherBean someOtherBean;
}

然后在我的 beans.xml 中:

<context:spring-configured/>

所以现在假设 ClassNotManagedBySpring.java 是 6 个类之一,它们都做类似的事情,除了其中 3 个由 spring 管理,因为它们具有 @Component 注释。

但是所有这 6 个类都需要 @Autowire MyBean.java 并且只有一些需要 @Configurable 注释。

请注意,我之前已经在此应用中使用 AspectJ 用于多种其他目的。

我想知道我的 spring 应用程序突然以这种方式将 spring 托管依赖项连接到非托管类中的风险是什么?

可能存在性能问题吗?运行时出错的风险?

如果这不是将 Spring 托管 bean 连接到非托管类的最佳方式,那是什么?

【问题讨论】:

    标签: java spring dependency-injection inversion-of-control aspectj


    【解决方案1】:

    我多年来一直使用@Configurable 没有问题,如果您需要由 Spring 配置的应用程序实例化 bean,这是一个非常简单的解决方案。我的用例都在 UI 层。每当我需要构造函数中已有的自动装配值时,我也会使用@Configurable(preConstruction = true)。当然,如果您制作数百万个 @Configurable 对象,这可能是性能问题,否则我不会太担心。我遇到的唯一小的美学问题是 Eclipse 在扩展 @Configurable 类的类定义中给了我一些红色下划线,抱怨 SomeClass 类的层次结构不一致,但它仍然编译了它们,在问题视图或运行时。

    【讨论】:

    • 如果除了容器中设置的bean之外,我还想在非spring管理的类中使用相同的spring bean怎么办?
    • 这就是使用@Configurable的全部目的。
    • 嗯,既然现在这样做了,我注释为已配置的类自动连接我的依赖关系很好,并且这些类的注释如下:@Configurable(autowire=Autowire.BY_TYPE, preConstruction = true),但现在在我的其他没有 Configurable 并且由 spring 作为 bean 管理的类中,我得到以下信息:
    • 嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“(内部 bean)”的 bean 时出错:bean 实例化失败;嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException: 工厂方法 [public static java.lang.Object org.apache.cxf.configuration.jsse.spring.TLSClientParametersConfig.createTLSClientParameters(java.lang.String)] 抛出异常;嵌套异常是 java.lang.RuntimeException: java.io.FileNotFoundException:
    • 我认为该错误与您的具体配置有关,而不是与一般使用@Configurable有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2017-10-19
    • 2011-12-18
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多