Заводской впрыск весной
//XML
<bean id = "bar" factory-bean = "barFactory" factory-method = "getInstance"/>
//Java
Как вы делаете внедрение зависимостей только с интерфейсами и фабричными классами и без классов конфигурации?
//Service
public interface MyService {
void doSomething();
}
//ServiceFactory
public class MyServiceFactory {
MyService getInstance() {
//...
}
}
//Controller
@Controller
public class MyController {
@Autowired
private MyService myService;
}
Почему бы не добавить @Service
и/или @Component
к фабрике? Тогда вам не нужно использовать конфигурацию XML.
вы можете сделать это, не добавляя кодировку xml.
@Configuration
public class MyServiceFactory {
@Bean
MyService myService() {
return new MyService() {
@Override
public void doSomething() {
}
}
}
}
@Controller
public class MyController {
@Autowired
private MyService myService;
public void execute() {
myService.doSomething();
}
}
Вы можете вручную попросить Spring сделать это автоматически.
Пусть ваша фабрика реализует ApplicationContextAware. Затем предоставьте следующую реализацию на своей фабрике:@Override public void setApplicationContext(final ApplicationContext applicationContext) { this.applicationContext = applicationContext; }
а затем выполните следующие действия после создания компонента:
YourBean bean = new YourBean();
applicationContext.getAutowireCapableBeanFactory().autowireBean(bean);
bean.init(); //If it has an init() method.
как насчет добавления аннотации конфигурации в класс MyServiceFactory?