Разница между @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.