Подтвердить что ты не робот

Разница между @EntityScan и @ComponentScan

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

@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {

}

Я понимаю различия с документами API, но хочу разобраться в деталях. Также это означает, что все, что сканируется с помощью @ComponentScan, имеет более широкую видимость в контексте Spring, а @EntityScan - нет. Если при использовании некоторого атрибута с @ComponentScan должно хватить на необходимость привязки в контексте JPA, не так ли?

4b9b3361

Ответ 1

Аннотация @ComponentScan используется для автоматического создания bean-компонентов для каждого класса, помеченного @Component, @Service, @Controller, @RestController, @Repository,... и добавления их в контейнер Spring (что позволяет им быть @Autowired).

@EntityScan, с другой стороны, не создает бины, насколько я знаю. Он только определяет, какие классы должны использоваться конкретным постоянным контекстом. Начиная с весенней загрузки 1.4, которая включает JPA, MongoDB, neo4j, Cassandra и CouchBase.

Почему они не объединены? Ну, я не в команде Spring, но поскольку они имеют разные значения, зачем их объединять? @EntityScan должен в основном использоваться для сканирования ваших пакетов сущностей, тогда как @ComponentScan должен сканировать все пакеты, содержащие бины Spring, поэтому очень вероятно следующее:

@ComponentScan("org.example.base")
@EntityScan("org.example.base.entities")
public class MyConfig {

}

Ответ 2

@EntityScan представляет собой аннотацию debrecated, используемую для идентификации сущностей JPA, то есть постоянных классов, с точки зрения базы данных.

Вы используете @ComponentScan для поиска компонентов с точки зрения Spring, то есть классы (также известные как Java Beans), аннотированные с помощью @Component, @Service, @Repository, @Controller... Это компоненты Spring, добавленные в контейнер IoC.