Бывают случаи когда ваш бин зависит от 1 или нескольких других бинов приложения Spring - здесь на помощь приходит аннотация
@DependsOn, которая заставляет контейнер сначала создавать бины зависимостей - и только потом зависящий от них бин. В параметрах аннотации указываются имена бинов. Аннотацию можно использовать или в файле конфигурации приложения совместно с аннотацией @Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@Configuration
public class AppConfig {
@Bean("beanOne")
@DependsOn(value = { "beanTwo", "beanThree" })
public BeanOne getBeanOne() {
return new BeanOne();
}
@Bean("beanTwo")
public BeanTwo getBeanTwo() {
return new BeanTwo();
}
@Bean("beanThree")
public BeanThree getBeanThree() {
return new BeanThree();
}
}
или аннотировать класс бина:
@Component
@DependsOn(value = { "beanTwo", "beanThree" })
public class BeanOne {
@Autowired
private BeanTwo beanTwo;
@Autowired
private BeanThree beanThree;
...............
}
Аналогичный механизм есть для
синглтонов EJB стека JavaEE - только там в качестве параметров аннотации указывают имена классов и кроме того, учитывая что контейнер EJB по-умолчанию использует ленивое создание бинов (в отличие от Spring - он по-умолчанию создает бины сразу при старте приложения), то аналогичная аннотация используется как правило совместно с аннотацией @Startup, которая заставляет EJB создавать бины сразу при старте приложения - пример:
import javax.ejb.DependsOn;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
@DependsOn("EjbConfig")
public class EjbMain {
.....................
}
Комментариев нет:
Отправить комментарий