该注解运用在类或方法上,A组件需要依赖B组件,就可以使用@DependOn(B),从容器中获取组件B,这样的话组件A就能从容器中获取到。
一、示例
1.@DependOn是用在类和方法上,比如A组件需要依赖B组件,就可以使用@DependOn(B),这样就能实现B组件先注册到容器中,然后在注册A组件;
2.使用案例:
观察者模式情况下需要使用该注解,观察者模式三大组件:监听器(观察者)、事件源、事件;
模式的原理:监听器一直监听事件源,当事件源触发该事件,监听器就会感知并做出相应的变化;
(1)监听器对象:
package com.dbzhang.observer;
import org.springframework.stereotype.Component;
/**
* @program: spring-boot-2022-05
* @description: 观察者模式:监听器
* @author: zdb
* @motto: 认真写好每一行代码
* @create: 2022-12-04 20:01
*/
@Component
public class EventTListener {
public EventTListener() {
System.out.println("监听器启动...");
}
}
(2)事件源对象:
package com.dbzhang.observer;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
/**
* 备注:根据观察者模式,三大要素:监听器(观察者)、事件源、事件,触发机制:监听器(观察者)监测事件源,当事件源触发该事件后,监听器
* 就会产生相应的变化;
* @program: spring-boot-2022-05
* @description: 事件源
* @author: zdb
* @motto: 认真写好每一行代码
* @create: 2022-12-04 19:59
*/
@Component
//@DependsOn(value = "eventTListener")
public class EventSource {
public EventSource() {
System.out.println("事件源启动成功...");
}
}
(3)在项目中位置如图:
根据springboot初始化顺序是根据文件先后顺序,则会先加载事件源EventSource对象,然后在加载监听器EventTListener。
但是要想实现加载监听器EventTListener对象、事件源EventSource对象呢?就需要使用@DependOn注解来实现;只需要在EventSource类上使用该注解即可;
打印结果: