@DependsOn
@DependsOn作用,是用来表示一个bean A的实例化依赖另一个bean B的实例化, 但是A并不需要持有一个B的对象,如果需要的话就不用@DependsOn,直接用依赖注入就可以了或者ref标签。
如果通过xml配置
<bean id="beanId" class="classpath" depends-on="beanB"/>
注解源码及举例
//当作用在类上时,通常会与@Component及其衍生注解等注解配合使用。
//当作用在方法上时,通常会与@Bean注解配合使用。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
//要依赖的bean id,是个数组,也就是说可以依赖多个bean。
//效果是该注解作用的bean会比value设置的依赖bean晚实例化到容器中。
String[] value() default {};
}
//异常事件处理
public class EventConfiguration {
//线程池数
@Value("event.thread.pool.count")
private int eventThreadPoolCount;
//事件处理器包路径
@Value("event.handler.scan.package")
private String eventHandlerScanPackage;
//线程池
@Bean
@DependsOn(value = "fixedThreadPool")
public EventDispatcher eventDispatcher(ExecutorService fixedThreadPool){
return new EventDispatcher(eventHandlerScanPackage,fixedThreadPool);
}
//创建线程池
@Bean(name = "fixedThreadPool")
public ExecutorService fixedThreadPool(){
return Executors.newFixedThreadPool(this.eventThreadPoolCount);
}
}