首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将bean注入到Spring托管上下文之外的类中

将bean注入到Spring托管上下文之外的类中
EN

Stack Overflow用户
提问于 2008-11-22 05:35:18
回答 8查看 76.6K关注 0票数 61

我是我们公司的一个产品的最终用户。它不太适合集成到Spring中,但是我能够获得上下文的句柄,并通过名称检索所需的bean。然而,我仍然想知道是否有可能将一个bean注入到这个类中,即使该类不是由Spring本身管理的。

澄清:管理某个类MyClass的生命周期的同一个应用程序,也在管理Spring context的生命周期。Spring不了解MyClass的实例,我想知道如何向上下文提供实例,但不能在上下文本身中创建实例。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-04 07:36:28

您可以这样做:

代码语言:javascript
运行
复制
ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
    someBeanNotCreatedBySpring,
    AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);

您可以在YourClass中使用@Autowired等来指定要注入的字段等。

票数 64
EN

Stack Overflow用户

发布于 2008-11-23 10:32:16

假设你有如下的依赖链:

A --> B --> C --> x --> y -- >Z

A、B、C是spring托管bean(由spring框架构造和管理) x、y是由您的应用程序构造的非常简单的POJO,没有spring的帮助

现在,如果您希望y将使用spring获得对Z的引用,那么您需要有一个指向spring ApplicationContext的“句柄”

一种方法是实现ApplicationContextAware接口。在这种情况下,我建议A、B或C实现此接口,并将applicationContext引用存储在静态成员中。

所以让我们以C类为例:

代码语言:javascript
运行
复制
class C implmenets ApplicationContextAware{
    public static ApplicationContex ac;
     void setApplicationContext(ApplicationContext applicationContext)  {
               ac = applicationContext;
     }
 .............
}

现在,在y课上,你应该有:

代码语言:javascript
运行
复制
(Z)(C.ac.getBean("classZ")).doSomething()

HTH - Yonatan

票数 3
EN

Stack Overflow用户

发布于 2013-08-14 03:13:22

将bean引入Spring的一种方法是使用一个标记为Spring的帮助器类(标记为@Configuration bean ),该类有一个方法(标记为@Bean),该方法实际创建实例并通过Spring将其交还给Spring(在这一点上,Spring执行其属性注入和代理生成)。

我不太确定您需要的作用域是什么;使用prototype,您将在每个地方获得一个新的bean。

代码语言:javascript
运行
复制
@Configuration
public class FooBarMaker {
    @Bean(autowire = Autowire.BY_TYPE)
    @Scope("prototype")
    public FooBar makeAFooBar() {
        // You probably need to do some more work in here, I imagine
        return new FooBar();
    }
}

您可以将制造所需的属性注入@Configuration bean。(我使用它来创建接口的实例,其中要实例化的类名是在运行时定义的。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/310271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档