Внедрение сервисов 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. это тоже не сработало. Тот же результат.

0 ответов

Другие вопросы по тегам