Для чего используются @Repository и @Autowired. (Spring)
Я изучаю java в течение 3 месяцев, а иногда
я не могу понять цель использования чего-то.
одной темой была инъекция зависимостей и spring beans я выяснил окончание =)
теперь я путаюсь с двумя аннотациями @Autowired и @Repository.
Первое Что означает Autowiring? тогда
Почему я должен использовать их и какова разница между их использованием и не использованием?
Также сегодня я попытался использовать hibernate в проекте spring mvc, и мне пришлось искать около 15 (из-за ошибок класса, которые не были найдены) jar файлы beacuse зависимостей других файлов jar, используемых в проекте.
это должно было быть так? это делает обучение java очень трудным для новичков
спасибо...
Ответы
Ответ 1
@Repository - это аннотация, которая отмечает определенный класс как объект доступа к данным, тем самым уточняя его роль. Другими маркерами той же категории являются @Service и @Controller
@Autowired представляет собой аннотацию с совершенно другим значением: она в основном сообщает контейнеру DI для инъекции зависимости. Дополнительная информация на http://apollo89.com/java/spring-framework-2.5.3/api/org/springframework/beans/factory/annotation/Autowired.html
редактировать
Дополнительная информация на учебная точка
или docs.spring.io
Ответ 2
Оба аннотации имеют разные цели, которые необходимо использовать.
@Autowired
: это то же самое, что и <bean="xyz" autowire="byType">
, которое вы определяете в файле конфигурации. Контрольная переменная (зависимость), которая аннотируется с @Autowired, будет вставляться контейнером Spring как любое соответствие @Bean, найденное в классе @Configuration.
Кроме того, классы, аннотированные с @Component, @Service, @Repository, также считаются beans, поэтому их объекты вводятся в соответствующие зависимости.
Spring контейнер сканирует beans в классах, которые вы упомянули для "компонентного сканирования" или @ComponentScan ( "xyz" ).
@Repository
. Это также аннотация spring -framework. Когда вы комментируете класс @Repository, контейнер Spring понимает его как класс DAO и переводит все непроверенные исключения (брошенные из методов DAO) в Spring DataAccessException.
Класс DAO - это класс, в котором вы пишете методы для выполнения операций над db.
Ответ 3
@Autowired и @Repository - это очень разные понятия.
1. @Repository: это определение класса, который должен быть репозиторием. В общем случае вы можете просто использовать @Component, но для определения конкретно есть еще три аннотации, такие как Controller, service и repository. Преимущественно 2 преимущества: 1.Если вы определили (context: component-scan) в файле servlet.xml для сканирования определенного пакета и найдите его собственный spring. 2. Дополнительные преимущества, которые вы получаете от spring, как перевод ошибок доступа к базе данных, поэтому в основном определяется использование с классом, в котором вы подключаетесь к базе данных либо с помощью спящего режима, либо с помощью jdbc.
@Autowired: для включения зависимости во время выполнения spring, означает в классе, autowire объект и использовать его, поэтому этот bean будет автоматически создан без определения в xml файле