Вы когда-нибудь задавались вопросом: чем @Autowired отличается от @Inject и что из них предпочтительнее использовать?
Я до недавнего времени, тоже не задумывался, но потом всё чаще стал замечать, что сами разработчики из SpringSource в своих примерах используют аннотацию @Inject вместо, казалось бы, родной @Autowired.
@Inject является частью JSR-303, которая определяет базовые аннотации для DI-фреймворков. Начиная с третьей версии, если Spring находит в classpath JAR-файл с API этой спецификации, то автоматическая включается его поддержка. В простейшем случае это означает, что вместо @Autowired вы можете использовать @Inject.
В чем плюс использования @Inject? То, что он стандартизирован и, как следствие, вы получаете улучшение переносимости между различными DI-фреймворками (на данный момент это JavaEE 6, Spring 3.0 и Guice 2.0).
Из минусов можно выделить: а) добавление дополнительной зависимости б) отсутствует возможность задания опциональной зависимости (аналог @Autowired(required = false)). (Но насколько часто это надо и кто этим пользовался?..)
Если вы всё-таки решили использовать @Inject, то добавьте следующие строки в pom.xml:
Дальше, думаю, уже сами догадались:
Кроме инъекции непосредственно в члены класса, также поддерживается инъекция через setter-ы и конструкторы.
(Пост основан на вопросах/ответах со StackOverflow.com: What is the difference between @Inject and @Autowired, spring3 @autowired and @inject)
Я до недавнего времени, тоже не задумывался, но потом всё чаще стал замечать, что сами разработчики из SpringSource в своих примерах используют аннотацию @Inject вместо, казалось бы, родной @Autowired.
@Inject является частью JSR-303, которая определяет базовые аннотации для DI-фреймворков. Начиная с третьей версии, если Spring находит в classpath JAR-файл с API этой спецификации, то автоматическая включается его поддержка. В простейшем случае это означает, что вместо @Autowired вы можете использовать @Inject.
В чем плюс использования @Inject? То, что он стандартизирован и, как следствие, вы получаете улучшение переносимости между различными DI-фреймворками (на данный момент это JavaEE 6, Spring 3.0 и Guice 2.0).
Из минусов можно выделить: а) добавление дополнительной зависимости б) отсутствует возможность задания опциональной зависимости (аналог @Autowired(required = false)). (Но насколько часто это надо и кто этим пользовался?..)
Если вы всё-таки решили использовать @Inject, то добавьте следующие строки в pom.xml:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependency> | |
<groupId>javax.inject</groupId> | |
<artifactId>javax.inject</artifactId> | |
<version>1</version> | |
</dependency> |
Дальше, думаю, уже сами догадались:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.inject.Inject; | |
@Inject | |
private DataSource dataSource; |
Кроме инъекции непосредственно в члены класса, также поддерживается инъекция через setter-ы и конструкторы.
(Пост основан на вопросах/ответах со StackOverflow.com: What is the difference between @Inject and @Autowired, spring3 @autowired and @inject)
Не всегда возможно использовать Inject вместо Autowired. Например в EJB контейнере который уже работает с Inject (с помощью weld, например JBoss Wildfly). В этом случае если bean в Spring-контексте заинжектить с помощью Inject в EJB, то weld будет ругаться, что не знает такого бина.
ОтветитьУдалитьC autowired это возможно, Если задать @Interceptors(SpringBeanAutowiringInterceptor.class) то нужные бины подключаются по @Autowired из контекста, заданного в beanRefContext.xml
How to Get from Tropicana Casino Hotel to Tropicana Casino
ОтветитьУдалитьTropicana Hotel and Casino Resort. Tropicana 헬로우블랙잭 is a small, smoke-free casino located within a 포커 테이블 2-minute drive 룰렛 만들기 of Tropicana Atlantic City. Rating: 브라 벗기 미션 4.7 · 한게임 포커 클래식 3 reviews