Как вызывать методы репозиториев Spring Framework - PullRequest
0 голосов
/ 15 января 2019

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

@SpringBootApplication
public class Application {

    private static final Logger log = 
    LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public CommandLineRunner demo(CustomerRepository repository) {
        return (args) -> {
            // save a couple of customers
            ...
            // more lines, etc...

Чего я не понимаю, так это , откуда , из которого repository перешел в demo. Я знаю, что аннотация Autowired может сделать что-то подобное, но здесь она вообще не используется.

Более конкретная причина, по которой я спрашиваю, заключается в том, что я пытаюсь адаптировать то, что они здесь делают, к приложению, над которым я работаю. У меня есть класс, отдельный от всех вещей персистентности / хранилища, и я хочу вызывать методы хранилища, такие как save и findAll. Проблема в том, что репозиторий является interface, поэтому я не могу создать экземпляр этого объекта для вызова методов. Так я должен сделать новый класс, который implements интерфейс и создать объект этого? Или есть более простой способ использования аннотаций?

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Можете ли вы попробовать @Repository до объявления класса? Работал для меня в структуре Spring MVC.

@Repository
public class EntityDAOImpl implements EntityDAO{
...
}
0 голосов
/ 15 января 2019

Обращайте внимание на то, что приложение Spring Boot во время запуска стремится разрешить дерево зависимостей. Это означает обнаружение и создание экземпляров Beans, определенных приложением, и это классы, помеченные @Service, @Repository и т. Д.

Это означает, что конструктор по умолчанию (или помеченный @Autowire) для всех bean-компонентов вызывается, и после того, как все bean-компоненты были построены, приложение начинает работать.

Когда аннотация @Bean вступает в игру, это если у вас есть бин, который не знает значений его параметров конструктора во время компиляции (например, если вы хотите подключиться к метке времени «с начала»): тогда вы должны определить класс с аннотацией @Configuration и открывающий в нем метод @Bean, который возвращает ваш bean-компонент и имеет параметры, которые являются зависимостями bean-компонентов. В нем вы вызываете конструктор bean и возвращаете bean.

Теперь, если вы хотите, чтобы определенный метод некоторого класса вызывался после разрешения приложения, вы можете реализовать интерфейс CommandLineRunner или аннотировать метод с помощью @ PostConstruct.

Некоторые полезные ссылки / ссылки:

  1. https://docs.spring.io/spring-javaconfig/docs/1.0.0.m3/reference/html/creating-bean-definitions.html

  2. https://www.baeldung.com/spring-inject-prototype-bean-into-singleton

  3. Запуск кода после запуска Spring Boot
  4. Выполнение метода при запуске весной
0 голосов
/ 15 января 2019

При создании @Bean добавление хранилища в параметры bean-компонента достаточно, чтобы связать репо в bean-компоненте. Это работает почти так же, как добавление аннотации @Autowired внутри класса, аннотированного как @Component или что-то подобное.

Spring работает в основном с интерфейсом, поскольку это проще для проводки по сравнению с классами проводки бетона.

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