Java 使bean的成员可用于自动关联
我可以让Java 使bean的成员可用于自动关联,java,spring,autowired,Java,Spring,Autowired,我可以让MultiProvider.getFoo()自动连接到foocummer构造函数中吗 没有使Foo本身成为bean(例如,因为Spring不应该破坏它,因为这是MultiProvider的责任) 并且不引入从foocummer到MultiProvider(或任何其他类)的依赖关系 Spring只能自动连接声明的bean,可能的解决方法如下: @Component class MultiProvider { public Foo getFoo(); public Bar
MultiProvider.getFoo()
自动连接到foocummer
构造函数中吗
- 没有使
本身成为bean(例如,因为Spring不应该破坏它,因为这是Foo
MultiProvider的责任)
- 并且不引入从
到foocummer
(或任何其他类)的依赖关系MultiProvider
- Spring只能自动连接声明的bean,可能的解决方法如下:
@Component
class MultiProvider {
public Foo getFoo();
public Bar getBar();
}
@Component
class FooConsumer {
FooConsumer(Foo f);
}
您只需在
MultiProvider
中通过@Bean
@Component
class FooConsumer {
private final Foo foo;
FooConsumer(MultiProvider multiProvider) {
// MultiProvider will be autowired by spring - constructor injection
this.foo = multiProvider.getFoo();
}
}
@Component
class MultiProvider {
@Bean(destroyMethodName="cleanup") // HERE IS THE TRICK
public Foo getFoo();
public Bar getBar();
}
@Component
class FooConsumer {
FooConsumer(Foo f);
}
如果问题源于spring无法正确销毁它,那么您可以在@Bean
注释时声明的cleanup
方法中包含逻辑
@Component
class FooConsumer {
private final Foo foo;
FooConsumer(MultiProvider multiProvider) {
// MultiProvider will be autowired by spring - constructor injection
this.foo = multiProvider.getFoo();
}
}
@Component
class MultiProvider {
@Bean(destroyMethodName="cleanup") // HERE IS THE TRICK
public Foo getFoo();
public Bar getBar();
}
@Component
class FooConsumer {
FooConsumer(Foo f);
}
请注意,@component和@configurable与 有些细微的差别,但在您的情况下,如果不这样做,您可以使用@component 我想改变它
您可以将它们包括在
配置中
public class Foo {
public void cleanup() {
// destruction logic
}
}
不确定这是否违反了您的“非Bean本身”规则 你为什么在课堂上使用@Bean?@Bean是@Mohammaddrezaalagheband oops的方法级注释,我的意思是组件如果不将Foo本身变成Bean,你的意思是什么?
Autowire将只在Bean之间发生,当然你只能自动wire beanYes,但我的目的是不让FooConsumer依赖于MultiProvider。我要澄清的是,据我所知,这是不可能的,您只能自动连线bean,我不知道它是否相关,但您可以指定Foo
作为bean,并使用destroy
逻辑添加close()
方法,以便spring能够正确地销毁它。然后你可以将它定义为一个bean并自动连接它——我已经重新编写了我的问题。我不希望Spring破坏Foo,因为这是多供应商的责任。然而,既然destroy无论如何都应该是幂等的(在我目前的观点中至少是:P),我只是学究,这就是我解决它的方法(但没有自定义的destroy方法名
),我重新编写了这个问题来扩展非beanrule