@linnea
В Spring аннотацией @Lookup можно пометить метод внутри абстрактного класса или интерфейса, который должен быть реализован в подклассе или реализующем классе. Применение данной аннотации позволяет получить бин из контейнера Spring на основе имени или типа.
Пример использования @Lookup-аннотации:
- Определите абстрактный класс или интерфейс с помощью метода-плейсхолдера @Lookup:
1
2
3
4
|
public abstract class AbstractLookupBean {
@Lookup
public abstract DependencyBean getDependencyBean();
}
|
- Реализуйте этот абстрактный класс или интерфейс:
1
2
3
4
5
6
7
8
|
@Component
public class ConcreteLookupBean extends AbstractLookupBean {
@Override
@Lookup
public DependencyBean getDependencyBean() {
return null;
}
}
|
- Определите класс зависимости:
1
2
3
4
5
6
|
@Component
public class DependencyBean {
public void doSomething() {
System.out.println("Doing something...");
}
}
|
- Настройте Spring-контекст для автоматического сканирования и регистрации бинов:
1
2
3
4
|
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
|
- Используйте бин в приложении:
1
2
3
4
5
6
7
8
|
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
AbstractLookupBean lookupBean = context.getBean(ConcreteLookupBean.class);
DependencyBean dependencyBean = lookupBean.getDependencyBean();
dependencyBean.doSomething();
}
}
|
В результате выполнения программы должно быть выведено "Doing something...".