3 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以通過getFoo()在MultiProviderby 中注釋方法來實(shí)現(xiàn)這一點(diǎn)@Bean
@Component
class MultiProvider {
@Bean(destroyMethodName="cleanup") // HERE IS THE TRICK
public Foo getFoo();
public Bar getBar();
}
@Component
class FooConsumer {
FooConsumer(Foo f);
}
如果問題出在 spring 無法正確銷毀它的點(diǎn)上,您可以cleanup在注釋時(shí)包含聲明的方法中的邏輯@Bean
public class Foo {
public void cleanup() {
// destruction logic
}
}
請(qǐng)注意,@component 和 @configurable 或多或少相同,但存在一些細(xì)微差別,但在您的情況下,如果您不想更改它,可以使用 @component。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以將它們包含在您的Configuration.
@Configuration
class MyConfig {
@Bean
public MultiProvider getMP() {
return new MultiProvider() ;
}
@Bean
public Foo getFoo() {
return getMP(). getFoo();
}
}
不確定這是否違反了您的“不是 Bean 本身”規(guī)則。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
Spring 只能自動(dòng)裝配聲明的 bean,可能的解決方法如下:
@Component
class FooConsumer {
private final Foo foo;
FooConsumer(MultiProvider multiProvider) {
// MultiProvider will be autowired by spring - constructor injection
this.foo = multiProvider.getFoo();
}
}
添加回答
舉報(bào)