В Spring boot, есть ли главная аннотация для указания basePackages для сканирования компонентов, репозиториев, сущностей и т. Д. - PullRequest
0 голосов
/ 29 сентября 2018

Проблема:

Мне пришлось написать разные аннотации для разных типов объектов, например:

@SpringBootApplication
@EnableBatchProcessing
@ComponentScan(basePackages = { "com.dbs.ntb.remittance" })
@EnableJpaRepositories(basePackages = { "com.dbs.ntb.remittance" })
@EntityScan(basePackages = { "com.dbs.ntb.remittance" })
public class Application {

Есть ли главная аннотация, что-то вроде:

@Scan(basePackages = {"com.dbs.ntb.remittance"})

Обновление: я увидел, что @SpringBootApplication имеет следующее:

@SpringBootApplication(scanBasePackages = { "com.dbs.ntb.remittance" })
public class Application {

Но это только псевдоним для @ComponentScan.Он не сканирует репозитории и сущности.

1 Ответ

0 голосов
/ 29 сентября 2018

Да, @SpringBootApplication сделает все это за вас.Если вы поместите @SpringBootApplication в корневой пакет, он заберет репозитории JPA, найдет объекты и компоненты для вас.

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

Вы можете создать метааннотацию, чтобы по крайней мере обеспечить соблюдениевсе сканы были установлены.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ComponentScan
@EntityScan()
public @interface Scan {

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages();

    @AliasFor(annotation = EntityScan.class, attribute = "basePackages") String[] scanEntities();

}

Я пропустил @EnableJPARepositories, это по крайней мере заставит вас устанавливать значения для каждого сканирования, но я бы порекомендовал иметь загрузочное приложение в корне структуры пакета.

...