Springboot-注册注解【springboot常用注解】

1.组件注册

1.1 使用的注解

  • @Configuration:普通配置类,替代以前的配置文件,配置类本身也是容器的组件|
  • @SpringBootConfiguration:Springboot配置类,与@Configuration功能一样|
  • @Bean:替代以前的Bean标签,如果没有在Bean标签内定义名字,则默认组件的名字为方法名,可以直接修改注解的名字|
  • @Scope:多实例获取
  • @Import:导入第三方组件

1.2 步骤

1、@Configuration 编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean
3、或使用@Import 导入第三方的组件

1.3 实战

第一步:创建一个组件,比如我创建的是一个Cat实体类

public class Cat {private Long id;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

在这里插入图片描述
第二步:创建一个配置类,并且注册相应的组件,我创建的类名为ApplConfig

@Import(DruidRuntimeException.class) //第三方类,也可以通过Import导入,给容器中放指定类型的组件,组件的名字默认是全类名
@SpringBootConfiguration // 定义配置文件
public class AppConfig {@Scope@Bean("user01")public User user(){var user=new User();user.setName("张三");user.setId(1L);return user;}//2.给第三方类注册组件@Beanpublic FastsqlException fastsqlException(){return new FastsqlException();}}

在这里插入图片描述
第三步: 查看是否注册成功,在主程序中,查看容器中是否有这些组件

@SpringBootApplication// 告诉系统这是一个Springboot的应用
public class Boot2DemoApplication {public static void main(String[] args) {// java10:局部变量类型的自动推断var ioc = SpringApplication.run(Boot2DemoApplication.class, args);for (String s : ioc.getBeanNamesForType(User.class)) {System.out.println(s);}// 查看第三方库是否注册成功for (String s : ioc.getBeanNamesForType(FastsqlException.class)) {System.out.println(s);}for (String s :ioc.getBeanNamesForType(DruidRuntimeException.class)) {System.out.println(s);}}}

在这里插入图片描述

2. 条件注解

2.1 使用的注解

@ConditionalOnXxx

  • @ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
  • @ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
  • @ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
  • @ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为
  • @ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值

2.2 实战

场景:
● 如果存在FastsqlException这个类,给容器中放一个Cat组件,名cat01,
● 否则,就给容器中放一个Dog组件,名dog01
● 如果系统中有dog01这个组件,就给容器中放一个 User组件,名zhangsan 
● 否则,就放一个User,名叫lisi

代码:

@ConditionalOnClass(value = "com.alibaba.druid.FastsqlException") //放在类级别,如果注解判断生效,则整个配置类才会生效
@SpringBootConfiguration
public class AppConfig2 {@ConditionalOnClass(FastsqlException.class) // 如果类路径中存在这个类,则触发指定行为@Beanpublic Cat cat01(){return new Cat();}@ConditionalOnMissingClass(value="com.alibaba.druid.FastsqlException")// 如果类路径中不存在这个类,则触发指定行为@Beanpublic Dog dog01(){return new Dog();}@ConditionalOnBean(value = Dog.class) // 在有这个组件类的情况指定行为@Beanpublic User zhangsan(){return  new User();}@ConditionalOnMissingBean(value = Dog.class)// 在没有这个组件类的情况指定行为@Beanpublic User lisi(){return new User();}
}

在这里插入图片描述

验证是否按照指定条件注册的组件:在主程序中运行下面代码

@SpringBootApplication// 告诉系统这是一个Springboot的应用
public class Boot2DemoApplication {public static void main(String[] args) {// java10:局部变量类型的自动推断var ioc = SpringApplication.run(Boot2DemoApplication.class, args);// 查看一下容器中cat类的组件有哪些for (String s : ioc.getBeanNamesForType(Cat.class)) {System.out.println(s);}for (String s : ioc.getBeanNamesForType(Dog.class)) {System.out.println(s);}for (String s : ioc.getBeanNamesForType(User.class)) {System.out.println(s);}}
}

在这里插入图片描述

3.属性绑定

3.1 使用的注解

  • @ConfigurationProperties: 声明组件的属性和配置文件哪些前缀开始项进行绑定
  • @EnableConfigurationProperties:快速注册注解:

3.2 步骤

将容器中任意组件(Bean)的属性值和配置文件的配置项的值进行绑定

  • 1、给容器中注册组件(@Component、@Bean)
  • 2、使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定
  • 或者使用@EnableConfigurationProperties注解
场景:SpringBoot默认只扫描自己主程序所在的包。如果导入第三方包,即使组件上标注了@Component、@ConfigurationProperties 注解,也没用。因为组件都扫描不进来,此时使用这个注解就可以快速进行属性绑定并把组件注册进容器

3.2 实战

使用@ConfigurationProperties注解

第一步:注册组件
创建一个pig组件

@ConfigurationProperties(prefix ="pig")
@Component
public class Pig {private Long id;private String name;private Integer age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Pig{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

在这里插入图片描述
第二步:在配置文件properties中写好对应的配置

pig.id=1
pig.name=佩奇
pig.age=5

在这里插入图片描述
第三步:测试一下属性是否绑定成功


@SpringBootApplication// 告诉系统这是一个Springboot的应用
public class Boot2DemoApplication {public static void main(String[] args) {// java10:局部变量类型的自动推断var ioc = SpringApplication.run(Boot2DemoApplication.class, args);Pig pig=ioc.getBean(Pig.class);System.out.println("pig"+pig);}}

在这里插入图片描述
方式二
也可以将组件类名上方的@component取消掉,直接在配置类中注册组件也是可以的

@SpringBootConfiguration
public class AppConfig2 {@Beanpublic Pig pig(){return new Pig();}
}

方法三
也可以将prefix也放到配置文件中

@SpringBootConfiguration
public class AppConfig2 {@Bean@ConfigurationProperties(prefix ="pig")public Pig pig(){return new Pig();}
}
使用@EnableConfigurationProperties注解

第一步:先在bean中创建一个sheep组件,并且加上@ConfigurationProperties注解,绑定属性
@ConfigurationProperties(prefix = “sheep”)
public class Sheep {
private Long id;
private String name;
private Integer age;

public Long getId() {return id;
}public void setId(Long id) {this.id = id;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public Integer getAge() {return age;
}public void setAge(Integer age) {this.age = age;
}@Override
public String toString() {return "Sheep{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';
}

}

第二步:在配置文件`properties`中写好对应的配置
~~~ java
pig.id=1
pig.name=哈利
pig.age=5

第三步:在配置类中配置

/*
@EnableConfigurationProperties有两个功能
1.开启sheep的属性绑定
2.默认会直接把这个组件放到容器中
*/
@EnableConfigurationProperties(Sheep.class)
@SpringBootApplication
public class AppConfig3 {}

使用@EnableConfigurationProperties会把属性与组件绑定,并且还会自动将组件放到容器中./一般用于第三方写好的组件进行属性绑定,springboot默认只扫描主程序所在的包.

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

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

相关文章

字符串相似度匹配算法_莱茵斯坦距离算法

package day0330;public class LevenshteinDistanceUtil {public static void main(String[] args) {String a "WN64 F98";String b "WN64 F98 ";System.out.println("相似度:" getSimilarityRatio(a, b));}/*** 获取两字符串的相似度* * par…

FO-like Transformation Oracle Cloning

参考文献: [RS91] Rackoff C, Simon D R. Non-interactive zero-knowledge proof of knowledge and chosen ciphertext attack[C]//Annual international cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 1991: 433-444.[BR93] Bellare M…

2.Ansible的copy模块,我最常用的模块

1. 简述 先从我自身的情况来说,我不是运维人员,并且对linux操作也不是特别熟悉,所以工作中我使用ansible基本就是在平常的自动化部署中,而使用最多的模块就是copy模块。我使用copy模块也主要是来替换生产环境的配置文件。所以&am…

功率信号源简介及其应用有哪些内容

功率信号源是一种能够提供稳定输出功率信号的设备或电路。它在许多领域中都有广泛的应用。以下是一些关于功率信号源的内容: 功率信号源简介:功率信号源是一种电子设备或电路,它能够提供稳定的输出功率信号。功率信号源通常由放大器、稳压器、…

Unity随笔1 - 安卓打包JDK not found

今天遇到一个很奇怪的事情,之前可以正常打安卓包,但是突然报错如下: 提示很明显,找不到JDK了。可是我在下载Unity的时候明明安装了所有需要的组件,为什么今天突然不行。 看了眼Unity hub里面,没问题。 那就…

物联网实训室虚拟仿真软件建设方案

一、概述 物联网实训室虚拟仿真软件旨在紧密围绕立德树人的根本任务,充分依托先进的数字技术,并对接物联网行业的发展趋势和人才需求。通过对比真实企业工作环境,融合创新创业教育基因,秉承虚拟仿真技术与教育教学深度融合的理念&…

vivado实现分析与收敛技巧1

智能设计运行 智能设计运行 (IDR) 是一种特殊类型的实现运行 , 它使用复杂流程来尝试达成时序收敛。由于 IDR 可能较为激进 , 因此预计编译时间可达标准运行的约 3.5 倍。 IDR 围绕复杂的时序收敛功能特性展示了一个简单的用户界面 , 对…

Sentinel的一些知识二

11231041 下一个是 熔断规则是异常数 和异常比例一样 只是换成了异常个数 1秒内的异常数有3个,就熔断2秒 下一步 进行压力测试 11231343 热点规则 没懂这个热点规则存在的意义 某个用户访问过于频繁,对其进行限制,给其他用户访问的机…

nexus制品库的介绍及详细部署使用

一、nexus 介绍 Nexus 是一个强大的仓库管理工具,用于管理和分发 Maven、npm、Docker 等软件包。它提供了一个集中的存储库,用于存储和管理软件包,并提供了版本控制、访问控制、构建和部署等功能。 Nexus 可以帮助开发团队提高软件包管理的效…

Ps:用好钢笔工具

使用钢笔工具时,应随时注意鼠标指针的形状。 ◆ ◆ ◆ 基本操作方法 1、绘制闭合路径 路径绘制结束时回到起点即可创建闭合路径。 2、绘制开放路径 想结束绘制时,按住 Ctrl 键点击画布空白处,或者,直接按 Esc 键,即可…

hadoop完全分布式搭建

文章目录 集群部署规划服务器准备Mobaxterm 远程登录实验前准备安装软件工具关闭防火墙 安装 JDK 和 Hadoop创建软件包目录解压软件包配置环境变量 集群搭建先创建 HDFS 工作目录和 LOG 目录配置集群配置环境配置 HDFS 主节点信息、持久化和数据文件的主目录配置 HDFS 默认的数…

万户ezOFFICE wpsservlet任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息…