@Conditional 注解,基于条件实例对象
.catalogue-div { position: relative; background-color: rgba(255, 255, 255, 1); right: 0 }
.catalogue { background-color: rgba(255, 255, 255, 1); padding-right: 50px; padding-left: 20px; min-width: 300px; max-width: 500px; position: absolute; top: -4em; right: inherit; width: inherit; height: auto; border-radius: 5px; box-shadow: 5px 5px 10px 2px rgba(128, 128, 128, 1) }
.catalogue ul { }
.catalogue ul li { overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
.catalogue ul li:before { position: relative; content: "☞"; font-size: 25px; margin-right: 5px; margin-left: 20px; line-height: 25px; bottom: -2px }
.catalogue a { text-decoration: none }
.catalogue a:hover { color: rgba(173, 255, 47, 1); cursor: pointer }
1.说明:基于条件,判断是否实例化对象,注入容器中,组合@bean注解使用和扫描。
2.源代码
@Target({ElementType.TYPE, ElementType.METHOD}) // 注解在类、方法使用
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
Class<? extends Condition>[] value(); // 1.注解值必须继承Condition,2.值为单个值或数组
}
@FunctionalInterface
public interface Condition {
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);//返回false,条件不成立。目标动作不执行,返回true,条件成立执行目标动作。
}
3.使用方式:创建 Condition 的实现类 TsetCondition,使用@Condition(value= TsetCondition.class)
1.使用在类:条件成立实例化对象,注入容器
基于条件创建被标注的类,可以结合 @Service ,@Component ,@Controller 三个注解使用,条件成立,创建实例。
@Component
@Conditional(value = TestCondition.class)
public class Tst {
@Scheduled(fixedRate = 5000)
public void getStr() {
System.err.println("我的scheduled 执行了");
}
}
也可以结合 @Configuration ,@Bean 基于配置文件,条件不成立@Configuration标注的类不创建,类下被标注的@Bean方法不执行
@Configuration
@Conditional(value = TestCondition.class)
public class TestConfiguration { @Bean
public Tst createTst() {
return new Tst();
}
}
2.在方法上使用
结合@Bean注解使用 ,条件成立方法执行,创建对象实例。
@Configuration
public class TestConfiguration { @Bean
@Conditional(value = TestCondition.class)
public Tst createTst() { // 基于条件实例化Bean
return new Tst();
} @Bean
public Tst2 createTst2() { //没有条件、只要系统启动就会创建Tst2实例
return new Tst2();
}
}
3.多条件件使用(方法和类):会执行每个 Condition的 matches ,如果有一个返回false ,条件不成立目标不执行
@Configuration
public class TestConfiguration { @Bean
@Conditional(value = {TestCondition.class,TestCondition2.class})
public Tst createTst() { // 基于条件实例化Bean,只有 TestCondition 、TestCondition2 都返回true才实例化对象,就是说,value集合中只要有一个Condition不成立,就不会实例对象
return new Tst();
}
}
@Conditional 注解,基于条件实例对象的更多相关文章
- springboot根据不同的条件创建bean,动态创建bean,@Conditional注解使用
这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思. 倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的be ...
- 一文了解@Conditional注解说明和使用
@Conditional:Spring4.0 介绍了一个新的注解@Conditional,它的逻辑语义可以作为"If-then-else-"来对bean的注册起作用. @Con ...
- Spring中的@conditional注解
今天主要从以下几方面来介绍一下@Conditional注解 @Conditional注解是什么 @Conditional注解怎么使用 1,@Conditional注解是什么 @Conditional注 ...
- SpringBoot(15)—@Conditional注解
SpringBoot(15)-@Conditional注解 作用 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean. 一.概述 1 ...
- Spring @Conditional注解 详细讲解及示例
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xcy1193068639/article/details/81491071 前言: @Conditi ...
- spring 3.x变通实现@Conditional注解的功能
在某些情况下,我们要根据当前的系统配置决定是否初始化一个bean,也就是条件性加载,比如本地缓存或者分布式缓存,亦或是采用http实现或者socket实现.在spring 4.x中,可以使用新增的@C ...
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...
- Vue实例对象的数据选项
前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...
- JS基础:基于原型的对象系统
简介: 仅从设计模式的角度讲,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过这个类来创建对象,例如传统的面向对象编程语言 "C++"."Java" ...
随机推荐
- LeetCode刷题 字符串详解
一.字符串常用的操作 1. string类 1.1 string的定义与初始化 1.1.1 string的定义 1.1.2 string的初始化 1.2 string的赋值与swap.大小操作.关系运 ...
- Linux内核内存检测工具KASAN
KASAN 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题.KASAN 集成在 Linux 内核中,随 ...
- gcc: fatal error: limits.h: No such file or directory on macos
重装gcc brew install gcc 软链接链到新的gcc和g++ https://stackoverflow.com/questions/56280122/gcc-fatal-error-l ...
- @RestController注解的作用
原文出自"https://www.cnblogs.com/yaqee/p/11256047.html" 一.在Spring中@RestController的作用等同于@Contro ...
- 设计模式学习-使用go实现享元模式
享元模式 定义 优点 缺点 适用场景 代码实现 享元模式和单例模式的区别 参考 享元模式 定义 享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象. 享元模式的意图是复用对象,节省 ...
- python openpyxl、RESTful、Webservice接口 基础知识
最近 在做接口测试的时候,遇到如下问题:如何通过数据驱动去做批量接口测试呢,我们的测试数据放在哪里去维护?下面整理出相关点,供大家参考 1.如何维护接口测试数据:放在excel文件中,通过python ...
- vue.js学习与实战笔记(2)
驼峰式写法时需要注意的问题 学习到组件这一章时,由于没注意到vue中对于camelCased的解释,导致出错了都找不出来,后面发现 在使用驼峰式写法时,在使用模板的时候需要使用kebab-case命名 ...
- 正则表达式&&Java文本复杂操作
正则表达式1.正则表达式的优势和用途? 一种强大而灵活的文本处理工具: 大部分编程语言 .数据库.文本编辑器.开发环境都支持正则表达式.2.正则表达式定义: 正如他的名字一样是描述了一个规则,通过这个 ...
- 听说你想把对象存储当 HDFS 用,我们这里有个方案...
传统的大数据集群往往采用本地中心化的计算和存储集群.比如在谷歌早期的[三驾马车]中,使用 GFS 进行海量网页数据存储,用 BigTable 作为数据库并为上层提供各种数据发现的能力,同时用 MapR ...
- 钓鱼小技巧-XLM
前言 XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录.文章中有问题的地方还请指出. 一个简单的例子 新建一个excel表格,右键选择表,选择插入 插入 ...