1 介绍
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
String[] value() default {};
}
作用:
用于指定某个类的创建依赖的bean对象先创建。spring中没有特定的bean的加载顺序,使用此注解可以指定bean的加载顺序
属性:
value:用于指定bean的唯一标识,被指定的bean会在当前的bean创建之前加载。
2 演示
定义两个组件:事件源,事件监听器
package study.wyy.spring.anno.dependson.event;
import org.springframework.stereotype.Component;
/**
* @author by wyaoyao
* @Description
* @Date 2020/11/22 11:31 上午
*/
@Component
public class Event {
public Event() {
System.out.println("Event事件 创建了");
}
}
package study.wyy.spring.anno.dependson.event;
import org.springframework.stereotype.Component;
/**
* @author by wyaoyao
* @Description
* @Date 2020/11/22 11:31 上午
*/
@Component
public class EventListener {
public EventListener() {
System.out.println("EventListener 创建了。。。");
}
}
配置类
package study.wyy.spring.anno.dependson.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author by wyaoyao
* @Description
* @Date 2020/11/22 11:27 上午
*/
@Configuration
@ComponentScan("study.wyy.spring.anno.dependson")
public class SpringConfig {
}
测试
@org.junit.Test
public void test01(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
// 启动容器
context.start();
}
}
输出
Event事件 创建了
EventListener 创建了。。。
先创建了事件,再创建了监听器,但是一般期望先创建监听器,在创建事件
DependsOn注解,标注在创建事件之前先创建事件的监听器
package study.wyy.spring.anno.dependson.event;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
/**
* @author by wyaoyao
* @Description
* @Date 2020/11/22 11:31 上午
*/
@Component
// 注意我们使用的componentScan,bean的默认标识就是简单类名首字母小写
@DependsOn("eventListener")
public class Event {
public Event() {
System.out.println("Event事件 创建了");
}
}
在测试
EventListener 创建了。。。
Event事件 创建了