我是我们公司的一个产品的最终用户。它不太适合集成到Spring中,但是我能够获得上下文的句柄,并通过名称检索所需的bean。然而,我仍然想知道是否有可能将一个bean注入到这个类中,即使该类不是由Spring本身管理的。
澄清:管理某个类MyClass的生命周期的同一个应用程序,也在管理Spring context的生命周期。Spring不了解MyClass的实例,我想知道如何向上下文提供实例,但不能在上下文本身中创建实例。
发布于 2009-09-04 07:36:28
您可以这样做:
ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
someBeanNotCreatedBySpring,
AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);您可以在YourClass中使用@Autowired等来指定要注入的字段等。
发布于 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类为例:
class C implmenets ApplicationContextAware{
public static ApplicationContex ac;
void setApplicationContext(ApplicationContext applicationContext) {
ac = applicationContext;
}
.............
}现在,在y课上,你应该有:
(Z)(C.ac.getBean("classZ")).doSomething()HTH - Yonatan
发布于 2013-08-14 03:13:22
将bean引入Spring的一种方法是使用一个标记为Spring的帮助器类(标记为@Configuration bean ),该类有一个方法(标记为@Bean),该方法实际创建实例并通过Spring将其交还给Spring(在这一点上,Spring执行其属性注入和代理生成)。
我不太确定您需要的作用域是什么;使用prototype,您将在每个地方获得一个新的bean。
@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。(我使用它来创建接口的实例,其中要实例化的类名是在运行时定义的。)
https://stackoverflow.com/questions/310271
复制相似问题