2016-11-28 2 views
0

Интерфейс Spring Boot CrudRepository, кажется, помогает мне, когда все объекты JPA настроены. У меня есть ситуация, когда я хотел бы создавать эти экземпляры CrudRepository по мере необходимости и не всегда основываться на аннотации @Autowired. Например, в моем случае использования у меня есть меню графического интерфейса, которое будет содержать список имен доменов (или ссылок). В зависимости от того, что пользователь выбирает, программа затем создает экземпляр одной из этих реализаций CrudRepository.Spring Boot Autwired support for CrudRepository

Если я использую @Autowired, то разве мне не нужно заканчивать все возможные известные реализации в моем коде?

Один гипотетический случай использования:

public interface PublisherRepository extends CrudRepository<Publisher, Long> { 
} 

public interface AuthorRepository extends CrudRepository<Author, Long> { 
} 

(. Я просто понял, что все равно придется создавать эти объекты после того, как все)

В меню GUI, будет «Издательство», «Автор» и т. д., и мне нравится создавать компоненты обслуживания GUI на основе вышеупомянутых интерфейсов репозитория. Будет ли хорошая практика поставить @Autowired следующим образом или просто создать их динамически?

@Autowired 
PublisherRepository publisherRepo; 

@Autowired 
AuthorRepository authorRepo; 

Если бы существовал способ для создания этих экземпляров Репо, не могли бы вы научить меня, как это делается в Spring ботинке? Большое спасибо за обмен опытом заблаговременно!

С уважением,

Student_t

+0

Вам действительно нужно, чтобы они были ленивыми? Я не думаю, что это сэкономит вам дополнительное время. – Slimer

ответ

-2

Обычно, бобы созданы с нетерпением, так @Autowiring не использовали бобы не является проблемой. В любом случае они будут использовать память и потреблять некоторое время запуска.

Если вы действительно не хотите использовать autwire, вы можете @Autowire org.springframework.beans.factory.BeanFactory и использовать getBean для получения желаемого репозитория. Но это ужасная идея. Это связывает ваш @Service с Spring и (в случае, если ваш репозиторий не найден), вы получите более поздний (во время доступа) исключение выполнения, а не startup-exception.

+2

Нет, нет. Spring Data JPA позаботится об этом. Также помещать эту аннотацию на интерфейс практически бесполезно. –

+0

o, полезно знать! –

+0

@ M.Deinum, поэтому, если вы используете Spring Data && Spring Boot, вам больше не нужна аннотация;) (например, '@ Configuration',' @ EnableAutoConfiguration', '@ EnableWebMvc',' @ ComponentScan', '@ Repository' -> trash) –

Смежные вопросы