Java Spring Data @EnabledJPARepositories вопрос - PullRequest
0 голосов
/ 01 июля 2019

Привет, я использую Spring Data с Hibernate в качестве провайдера JPA. У вас есть класс, это автономное приложение, в котором я не использую Boot в этом проекте.

@Configuration
@ComponentScan(basePackages={basePackages})
@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})
public class Company{

Я использую UserDao следующим образом.

@Repository
public interface UserDao extends GenericDao<User>{    
   @Query("query")
   public int findByLoginAndPass(@Param("login") String login,@Param("password") String password);
}

public interface GenericDao<T extends AbstractEntity> extends CrudRepository<T,Integer>{    

}

Это работает как талисман, но позже я создаю сервис GTule, который также использует genericDAO.

@org.springframework.stereotype.Service
@Transactional
public class VehiculeServiceImpl implements VehiculeService<Vehicule> {
  @Autowired
  private GenericDao<T> genericDao;

  @Override
  public T save(final T entity){
     return genericDao.save(entity);        
  }

}

Этоработает также как шарм, так в чем же проблема, верно?

Оба класса используют GenericDao, который я не использую в качестве примечания Spring, и в конфигурации я использую

@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})

И я вижуgenericDao как Spring управляемый bean-компонент в моей конфигурации, поэтому 2 вопроса:

1).Почему GenericDao является управляемым компонентом в моем контексте?Является ли расширение CrudRepository, но CrudRepository является @NoRepositoryBean?Если я не расширяю интерфейс CrudRepository, мой класс больше не будет компонентом.

2).Почему я могу хранить ГИБДД в своем приложении, даже если не указал ничего кроме UserDao в @EnabledJpaRepositories?

UserDao ---> com.company.dao.UserDao GenericDao -> com.company.dao.abstraction.GenericDao

Если я скажу

@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})

Он будет искать где?

Извините, если вопрос простой, это тот самый раз, когда я использую Spring Data с нуля.

Большое спасибо.

1 Ответ

2 голосов
/ 01 июля 2019
  1. Поскольку это принцип Spring Data JPA: он создает bean-компонент для каждого сканируемого интерфейса, который расширяет репозиторий.

  2. Поскольку он находится в том же пакете, что и UserDao, и вы сказали JPA сканировать пакет, содержащий класс UserDao: basePackageClasses = {com.company.dao.UserDao.class}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...