Spring中@DependsOn注解的使用代码实例
@DependsOn的简介
/** * Beans on which the current bean depends. Any beans specified are guaranteed to be * created by the container before this bean. Used infrequently in cases where a bean * does not explicitly depend on another through properties or constructor arguments, * but rather depends on the side effects of another bean's initialization. * * <p>A depends-on declaration can specify both an initialization-time dependency and, * in the case of singleton beans only, a corresponding destruction-time dependency. * Dependent beans that define a depends-on relationship with a given bean are destroyed * first, prior to the given bean itself being destroyed. Thus, a depends-on declaration * can also control shutdown order. * * <p>May be used on any class directly or indirectly annotated with * {@link org.springframework.stereotype.Component} or on methods annotated * with {@link Bean}. * * <p>Using {@link DependsOn} at the class level has no effect unless component-scanning * is being used. If a {@link DependsOn}-annotated class is declared via XML, * {@link DependsOn} annotation metadata is ignored, and * {@code <bean depends-on="..."/>} is respected instead. * * @author Juergen Hoeller * @since 3.0 */ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface DependsOn { String[] value() default {}; }
说明
- 使用范围. 注解可以使用在类上,方法上. 在类上,一般与@Component注解使用 ; 在方法上, 通常会与@Bean注解使用.
- 注解中的字段是一个数组value, 填充的是bean对象,可以放置多个bean, 填入的bean会比使用该注解的对象早一点注册到容器中.
使用场景
在一些场景, 需要去监听事件源的触发,从而处理相应的业务. 那么就需要监听类比事件源先注册到容器中, 因为事件源触发前,监听就应该存在,否则就不满足使用场景的要求.
@DependsOn的使用
案例1
1 准备一个SpringBoot环境
2 添加监听类和事件源类
@Component public class ASource { public ASource(){ System.out.println("事件创建"); } }
@Component public class BListener { public BListener(){ System.out.println("监听创建"); } }
3 启动项目,查看控制台
// 事件创建 // 监听创建
上面明显,不符合实际使用要求.
4 改造事件源类
@Component @DependsOn(value = {"BListener"}) public class ASource { public ASource(){ System.out.println("事件创建"); } }
5 启动项目,查看控制台
// 监听创建 // 事件创建
上述输出,满足使用要求.
案例2
1 添加配置类
@Configuration public class Config { @Bean @DependsOn(value = {"BListener"}) public ASource aSource(){ return new ASource(); } @Bean public BListener bListener(){ return new BListener(); } }
2 启动项目,查看控制台
// 监听创建 // 事件创建
满足使用要求.
到此这篇关于Spring中@DependsOn注解的使用代码实例的文章就介绍到这了,更多相关@DependsOn注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。本文主要介绍了使用Spring Cloud Alibaba Sentinel组件,感兴趣的可以了解一下2021-07-07Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)
这篇文章主要介绍了Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12Java abstract class 与 interface对比
这篇文章主要介绍了 Java abstract class 与 interface对比的相关资料,需要的朋友可以参考下2016-12-12
最新评论