Я создал в проекте Springboot, где есть класс JPA: -
package com.example.demo.jpa;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.model.Users;
@Repository
public interface AppRepo extends CrudRepository<Users, Integer>, AppRepoCustom {
public List<Users> findAllByJob(String job);
}
Другой интерфейс AppRepoCustom выглядит следующим образом:
package com.example.demo.jpa;
import java.util.List;
public interface AppRepoCustom {
public List<String> getAllNames();
}
Реализация интерфейса: -
package com.example.demo.jpa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.example.demo.model.Users;
public class AppRepoCustomImpl implements AppRepoCustom {
@PersistenceContext
EntityManager entityManager;
@Override
public List<String> getAllNames() {
Query query = entityManager.createNativeQuery("SELECT name FROM springbootdb.Users as em ", Users.class);
return query.getResultList();
}
}
Теперь внутри моего класса контроллера я внедряю объект AppRepo
@Autowired
AppRepo appRepo;
Мой вопрос заключается в том, что я нигде не указал, какая реализация AppRepo будет внедрена, тогда как пружина способназалить его без ошибок? Когда мы создаем объект типа интерфейс, такой как Interface objectName = new implClass ();где implClass содержит всю реализацию методов интерфейса. Но в приведенном выше примере некоторые реализации находятся в классе CrudRepository, а некоторые - в AppRepoCustom, поэтому как здесь работает создание этого объекта? Я смущен. Как внутренние объекты создаются при создании объекта, такого как Interface objectName = new implClass () и в данном сценарии.