你好,我有一个任务需要调用一些初始化代码,这些代码需要使用一个名为
这是一种丑陋但有效的“hack”方法。它产生一个
我真正需要做的是在
config
的bean,同时不暴露另一个会执行初始化的bean。到目前为止,我没有成功地做到这一点,除非使用初始化器bean。
用例: CarFactory
有一个静态的init
方法,它有一个PartProvider
参数,在PartProvider
bean可用后应该被调用。 CarFactory
和SeatProvider
来自依赖项,不能更改。import javax.inject.Inject;
public abstract class CarFactory {
private static PartProvider partProvider;
private CarFactory() {
}
@Inject
public static void init(final PartProvider partProvider) {
PartProvider.partProvider = partProvider;
}
}
public class SeatProvider implements PartProvider {
Config config;
@Inject
public SeatProvider(@NonNull Config config) {
this.config = config;
}
}
我目前的代码暴露了初始化器bean
初始化器bean
public class FactoryInitializer implements InitializingBean {
private PartProvider partProvider
@Inject
public FactoryInitializer(PartProvider partProvider) {
this.partProvider = partProvider;
}
@Override
public void afterPropertiesSet() throws Exception {
CarFactory.init(provider);
}
}
配置
@Configuration
public class AppConfiguration {
@Bean
public FactoryInitializer factoryInitializer(final Config config) {
return new FactoryInitializer(new SeatProvider(config));
}
}
这是一种丑陋但有效的“hack”方法。它产生一个
null
的Object
bean。@Bean
public Object notificationInit(final Config config) {
CarFactory.init(new SeatProvider(config));
return null;
}
我真正需要做的是在
config
可用的地方调用以下代码。CarFactory.init(new SeatProvider(config));
Config
是一个bean,您可以在其中使用@PostConstruct
方法,并像CarFactory.init(new SeatProvider(this));
一样调用它,但我不确定。 - undefinedthis.partProvider = partProvider;
无法编译通过。 - undefined