springboot——自动装配

自动装配

Condition:

Condition内置方法:boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata),返回值为布尔型
重写matches方法的类:SpringBootCondition

在这里插入图片描述
SpringBootCondition:springboot自带的实现类

public final boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {String classOrMethodName = getClassOrMethodName(metadata);try {ConditionOutcome outcome = this.getMatchOutcome(context, metadata);this.logOutcome(classOrMethodName, outcome);this.recordEvaluation(context, classOrMethodName, outcome);return outcome.isMatch();} catch (NoClassDefFoundError var5) {throw new IllegalStateException("Could not evaluate condition on " + classOrMethodName + " due to " + var5.getMessage() + " not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)", var5);} catch (RuntimeException var6) {throw new IllegalStateException("Error processing condition on " + this.getName(metadata), var6);}}

正式:

简易实现上面代码逻辑

创建类Guser类

方法上添加注解@ConditionOnclass(“hunter”):表示能够查询指定的Bean对象则创建方法中的创建Bean,否则报错

package com.example.service.service;import com.example.controller.conditionOnclass;
import com.example.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Guser {@conditionOnclass("hunter")@Beanpublic User user(){return new User();}}
}

conditionOnclass注解接口
注解@conditionOnclass接口:指定范围,存在时间,文档,@Conditional

A注解上的B注解可以作用到A注解正在注解的方法上

package com.example.controller;import org.springframework.context.annotation.Conditional;
import java.lang.annotation.*;@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(myConditional.class)
public @interface conditionOnclass {String[] value();
}

自定义一个Condition演示原理的类:创建一个实现了Condition接口的类

通过反射conditionOnclass.class.getName()获得指定注解下面定义的属性的值,获取成功则返回true,失败则false

myConditional类:实现Condition接口

package com.example.controller;import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;import java.util.Map;public class myConditional implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//        获得指定注解上面的参数值(即jar包,且可能有多个)Map<String,Object> map= metadata.getAnnotationAttributes(conditionOnclass.class.getName());String[] strings=(String[])map.get("value");try{
//            遍历出来jar包,然后通过反射进行获取,如果没有获取到就进行返回false的处理for (String className: strings) {Class<?> aClass=Class.forName(className);}}catch (ClassNotFoundException e){return false;}return true;}
}

思路:

  • 注解接口conditionOnclass加在Guer中的public User user(){}方法上,只有当此注解中传入的参数(spring容器中的bean的id)存在时,即其返回值为true时,该方法的bean才能注册成功
  • ture详解:注解conditionOnclass接口中添加注解@Conditional(myConditional.class)其中参数为自定义实现Condition接口的实现类,其中实现了matches()方法,实现了逻辑:通过反射查询当前传进来的bean的id,查询成功返回true,反之false,如此Guser中方法上的@conditonOnclass注解就根据返回的true或者false进行操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 Python 进行数据分析实验(二)

一、实验目的、 使用Python解决简单问题 二、实验要求 自主编写并运行代码&#xff0c;按照模板要求撰写实验报告 三、实验步骤 本次实验共有4题&#xff1a; 输入2000年后的某年某月某日&#xff0c;判断这一天是从2000年1月1日开始算起的第几天&#xff1f;公务员面试设…

NodeJS安装

前言&#xff1a; 因为java行业不景气&#xff0c;人才严重过剩&#xff0c;像我我这样的人&#xff0c;只能选择往广度走走&#xff0c;开始学Vue3. Vue3现在默认要NodeJs版本16及以上&#xff0c;所以我这里安装了18.18.0的&#xff0c;目前逛网最新稳定版本是20版本的。 1…

表单修改时取消disabled snippet

前言 有时候开发&#xff0c;表单编辑时有些字段不可更改&#xff0c;比如用户管理的用户名&#xff0c;修改时不可编辑。但是有时候就会有这么一种情况&#xff0c;希望他修改时也可编辑。所以就可以在浏览器–控制台里面写一个snippet&#xff0c;修改时运行。 当然&#xf…

python正则表达式的例子

例子 当涉及到正则表达式时&#xff0c;可以有很多不同的用例。这里举几个简单的例子来说明正则表达式的使用&#xff1a; 匹配邮箱地址&#xff1a; import repattern re.compile(r\w\w\.\w) string My email address is testexample.comresult pattern.search(string) …

字节面试题 小于n的最大数

输入&#xff1a; A a 1 , a 2 , . . . , a m ( 0 < a i < 9 , 1 < m < 10 ) ; n A {a_1,a_2,...,a_m}(0<a_i<9,1<m<10);n Aa1​,a2​,...,am​(0<ai​<9,1<m<10);n 输出&#xff1a;构造小于n的最大数&#xff08;可重复使用 a i …

【投稿优惠|检索稳定】2023年信息系统和工程与数字化经济国际会议(ICISEDE 2023)

2024年信息系统和工程与数字化经济国际会议(ICISEDE 2024) 2024 International Conference on Information Systems and Engineering and the Digital Economy(ICISEDE 2024) [会议简介] 2024 年信息系统和工程与数字化经济国际会议(ICISEDE 2024)将于 2024 年 1 月 20 日在厦门…

小型洗衣机什么牌子好又便宜?性价比内衣洗衣机推荐

在内衣洗衣机越来越受欢迎的今天&#xff0c;不少朋友都在犹豫要不要买一台内衣洗衣机&#xff0c;专门来清洗一些贴身衣物&#xff0c;这个问题的答案是很有必要的&#xff0c;因为目前市场上的大型洗衣机只是起到了清洁的作用&#xff0c;并不能有效地清除我们的贴身衣服上细…

Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 对称二叉树 1.1 判断对称二叉树实现思路 1.2 代码实现&#xff1a;判断对称二叉树 2.0 二叉树的最大深度 2.1 使用递归实现获取二叉树的最大深度思路 2.2 代码实…

batch_size太大和太小的优缺点分别是什么?

在深度学习的实验当中&#xff0c;我们通常回去设置batch_size&#xff0c;那batch_size开的太大和太小分别会为我们带来什么样的优缺点呢&#xff1f; 批处理大小过大&#xff1a; 优点&#xff1a; 训练速度较快&#xff1a;大批次可以充分利用硬件加速器&#xff08;如GP…

Python 生成API文档

目录 前言&#xff1a; 项目层级 安装sphinx 创建sphinx文档项目 配置conf.py文件 编译代码为api文档 编译文档&#xff08;windows&#xff09; 异常处理 异常1&#xff1a;无法生成rst文件 异常2&#xff1a;WARNING: autodoc: failed to import module xxx;WARNING…

etcd 与 Consul 的一致性读对比

本文分享和对比了 etcd 和 Consul 这两个存储的一致性读的实现。 作者&#xff1a;戴岳兵&#xff0c;爱可生研发中心工程师&#xff0c;负责项目的需求开发与维护工作。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本…

Python实现FA萤火虫优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

0基础学java-day14

一、集合 前面我们保存多个数据使用的是数组&#xff0c;那么数组有不足的地方&#xff0c;我们分析一下 1.数组 2 集合 数据类型也可以不一样 3.集合的框架体系 Java 的集合类很多&#xff0c;主要分为两大类&#xff0c;如图 &#xff1a;[背下来] package com.hspedu.c…

UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)

UniApp 运行到浏览器的时候&#xff0c;接口会跨域报错&#xff0c;这里通过两种方式解决&#xff0c;第一&#xff1a;修改Uniapp自带的manifest.json 源码视图并进行配置h5设置。第二&#xff1a;在项目根目录新建vue.config.js并配置代理。 二选一即可。 修改或调整配置文件…

Python 进阶(十四):枚举类型(enum 模块)

大家好&#xff0c;我是水滴~~ 本篇文章主要介绍了Python中的枚举类型&#xff0c;主要内容包括&#xff1a;枚举类型的简介、创建枚举类型、使用枚举类型等。 文章中包含大量的代码示例&#xff0c;能够帮助新手同学快速入门。 《Python入门核心技术》专栏总目录・点这里 文…

Java使用Redis

项目是基于 maven 构建的&#xff0c;那么可以直接导入 maven 坐标&#xff0c;如下所示&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency>…

Vue 父传子组件传参 defineProps

defineProps 属性&#xff1a;用于接收父组件传递过来的数据。 注意&#xff1a;如果 defineProps 接收的参数名&#xff0c;和已有变量名相同&#xff0c;就会造成命名冲突。 语法格式&#xff1a; // 无限制 const props defineProps([参数名, 参数名]);// 限制数据类型 …

第二十一章总结

一、网络通信&#xff1a; 1.网络程序设计基础&#xff1a;网络程序设计编写的是与其他计算机进行通信的程序。 1.1局域网与互联网&#xff1a;为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机 2.网络协议&#xff1a;网络协议规定了计算机之间连接的…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录&#xff1b;图示如下&#xff1a; 请注册文心一言账号并点击登录&#xff0c;图示如下&#xff1…

Java面试题(每天10题)-------连载(42)

目录 Spring篇 1、Spring Bean的作用域之间有什么区别&#xff1f; 2、什么是Spring inner beans&#xff1f; 3、Spring框架中的单例Beans是线程安全的吗&#xff1f; 4、请举例说明如何在Spring中诸如一个Java Collection&#xff1f; 5、如何向Spring Bean中诸如一个J…