@Autowire Spring Bean с аргументами инжектированного конструктора? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть структура проекта, похожая на ту, что связана здесь: https://stackoverflow.com/a/29583882/1243462.У меня есть util library , содержащая класс Service в одном JAR, предназначенном для использования из другой библиотеки Java / проекта Maven.Однако сам мой класс Service использует конструктор Injection.Итак, где исходный вопрос имел:

@Service
public class PermissionsService { ... }

У меня есть

@Service
public class PermissionsService {

  public PermissionsService(@Autowired PermissionsDao dao) { 
   //assign private dao field to autowired dao
  }

}

И, как и в оригинальном сообщении, я хочу создать экземпляр PermissionsService и вставить его в мойклиент / потребительское приложение.Я не уверен, как создать класс конфигурации.

 @Configuration
 public class PersistenceConfig {

   public PermissionsService getPermissionsServiceBean() {
     //What goes here?
   }
}

Пока у меня есть обходной путь, когда я заменил аргумент конструктора @Autowired PermissionsDao на инъекцию поля и конструктор без аргументов,Это позволяет мне:

 @Configuration
 public class PersistenceConfig {

   public PermissionsService getPermissionsServiceBean() {
     return new PermissionsService();
   }
}

Но, поскольку внедрение в поле не рекомендуется, как правильно структурировать этот код?

1 Ответ

0 голосов
/ 05 октября 2018

В вашем основном модуле

@Configuration
@Import(PersistenceConfig.class)
public class ServiceConfig() {

}

В вашем модуле утилит

@Configuration
@ComponentScan(basePackages = {"path-to-persistence-service-and-any-dependencies"})
public class PersistenceConfig {

}

Тот факт, что вы используете инжектор конструктора для PermissionsDao не имеет значения, если вы правильно настроили конфигурацию.

...