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

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

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

}

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

2 ответов


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

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

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

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

}

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

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