Spring IoC контейнер: конфигурация на основе аннотаций, @Resource
Spring также поддерживает внедрение с помощью аннотации JSR-250 @Resource (javax.annotation.Resource) для полей или методов установки свойств бина. Это общий шаблон в Java EE: например, в управляемых JSF bean-компонентах и конечных точках JAX-WS. Spring поддерживает этот шаблон и для объектов, управляемых Spring.
@Resource принимает атрибут name. По умолчанию Spring интерпретирует это значение как имя bean-компонента для внедрения. Другими словами, это следует за семантикой имени, как продемонстрировано в следующем примере:
Java
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
Kotlin
class SimpleMovieLister {
@Resource(name="myMovieFinder")
private lateinit var movieFinder:MovieFinder
}
Если имя не указано явно, имя по умолчанию выводится из имени поля или метода установки. В случае поля оно принимает имя поля. В случае метода установки он принимает имя свойства компонента. В следующем примере будет добавлен бин с именем movieFinder в его метод установки:
Java
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
Kotlin
class SimpleMovieLister {
@Resource
private lateinit var movieFinder: MovieFinder
}
Имя, предоставленное аннотацией, разрешается как имя компонента с помощью ApplicationContext, о котором знает CommonAnnotationBeanPostProcessor. Имена могут быть разрешены с помощью JNDI, если вы настроите Spring SimpleJndiBeanFactory явно. Однако рекомендуется полагаться на поведение по умолчанию и использовать возможности поиска JNDI в Spring для сохранения уровня косвенности.
В исключительном случае использования @Resource без указания явного имени, аналогичного @Autowired, @Resource находит соответствие первичного (primary) типа вместо определенного именованного компонента и разрешает хорошо известные разрешаемые зависимости: BeanFactory, ApplicationContext, ResourceLoader, ApplicationEventPublisher и интерфейсы MessageSource.
Таким образом, в следующем примере поле customerPreferenceDao сначала ищет bean-компонент с именем customerPreferenceDao, а затем возвращается к основному совпадению типа для CustomerPreferenceDao:
Java
public class MovieRecommender {
@Resource
private CustomerPreferenceDao customerPreferenceDao;
@Resource
private ApplicationContext context;
public MovieRecommender() {
}
// ...
}
Kotlin
class MovieRecommender {
@Resource
private lateinit var customerPreferenceDao: CustomerPreferenceDao
@Resource
private lateinit var context: ApplicationContext
// ...
}
Поле context вводится на основе известного разрешаемого типа зависимости: ApplicationContext.
Читайте также:
- Spring IoC контейнер: конфигурация на основе аннотаций, точная настройка автопривязки на основе аннотаций с @Primary
- Spring IoC контейнер: конфигурация на основе аннотаций, использование @Autowired
- Spring IoC контейнер: конфигурация на основе аннотаций, настройка автопривязки на основе аннотаций с @Qualifier
- Spring IoC контейнер: конфигурация на основе аннотаций, использование дженериков в качестве квалификаторов автопривязки
Комментарии
Отправить комментарий