Внедрение сервисов Singleton в Prototype Bean
У меня есть этот код:
Звонил:
public class MyManager {
@Inject
private ObjectProvider<MyService> mySvcProvider;
public void processMyData(){
MyService mySvc = mySvcProvider.getObject("myName", "c:\myfolder");
mySvc.processValues();
}
Вызываемый:
@Named
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MyService{
private long recId;
private List<String> values;
@Inject
private mySingletonDBService mnDBSvc;
@Inject
private mySingletonFileService myFileSvc;
@Inject
public myManager(long recName, File folder)
throws DataExtractException {
this.recId = myDBSvc.getRecId(recName); <- Throws NPE
this.values = myFileSvc.getValues(recId);
}
public processMyValues(){
....
}
}
Таким образом, в вызываемом объекте при вызове конструктора не удается получить доступ к myDBSvc и myFileSvc. Оба являются нулевыми. Как мне внедрить свои одноэлементные сервисы в этот прототипBean. . Мой пакет зарегистрирован в applicationContext.xml, как показано ниже, поэтому все bean-компоненты отсюда следует найти>
<context:component-scan base-package="my.package.myProject"/>
Кстати, эта инъекция работает везде на других Singleton Beans. Он не работает ТОЛЬКО на этом прототипе Bean. Поэтому я мог бы технически попробовать внедрить этот сервисер в вызывающую сторону «MyManager» и передать их в качестве аргументов конструктора, но это неприятно. В примере у меня есть только два сервиса, но в моем производственном коде я использую около 10-15 сервисов. Помещать все это в конструктор, а затем вызывать этот конструктор из вызываемого объекта выглядит очень неправильно. Должен быть способ внедрить одноэлементный компонент в прототип компонента.
Другой вариант, который я попробовал, приведен ниже, используя applicationContext.getBean(Class, args). Тот же результат: конструктор вызывается правильно. Но все же эти две услуги являются нулевыми. Никогда не вводился. Я не знаю, в чем разница, но я также пробую d@Autowired вместо Inject. это тоже не сработало. Тот же результат.