springboot装配机制,spring boot conditional

  springboot装配机制,spring boot conditional

  

目录

1.相关介绍2.举例测试1.指定组件不存在时2.指定组件存在时3.完整代码

 

  

1.相关介绍

@有条件注解可以用在任何类型或者方法上面,通过@有条件注解可以配置一些条件判断,当所有条件都满足的时候,被@有条件标注的目标才会被春天容器处理。

 

  比如可以通过@有条件来控制豆是否需要注册,控制被@配置标注的配置类是需要需要被解析等。

  有条件的相关的其它注解:

  注解描述@ ConditionalOnBean在某个豆存在的时候@ ConditionalOnMissingBean在某个豆不存在的时候@ ConditionalOnClass当前类路径下可以找到某个班级的时候@ ConditionalOnMissingClass当前类路径下无法找到某个班级的时候@ ConditionalOnResource当前类路径下否存在某个资源文件的时候@ConditionalOnProperty当前虚拟机(Java虚拟机的缩写)包含某个属性值的时候@ConditionalOnWebApplication当前春天语境是网应用程序的时候@ConditionalOnJava在指定爪哇岛开发工具包版本的时候@ ConditionalOnExpression符合表达式的时候@ConditionalOnJndiJNDI存在该项的时候

  

2.举例测试

@条件bean,在某个豆存在的时候被标注的组件才被注册到国际奥林匹克委员会容器中

 

  下面是其详细代码

  @Target({ElementType .类型,元素类型。方法})@Retention(RetentionPolicy .运行时)@ documentated @ Conditional({ on bean condition。Class })public @ interface条件bean { Class?[]值()默认值{ };字符串[]类型()默认{ };班级?扩展批注[]批注()默认值{ };字符串[]名称()默认值{ };搜索策略搜索()默认搜索策略.所有;班级?[]参数化容器()默认值{ };}我们就拿它来测试一下

  

1.指定组件不存在时

我的配置

 

  包com。李米。配置;导入com。李米。实体。用户;导入org。spring框架。靴子。自动配置。条件。豆子的状况;导入org。spring框架。语境。注释。*;@ configuration public class my config {//@ Bean//公共用户user01(){//返回新用户(1, andy , 123456 );//} @ Bean @条件Bean(name= user 01 )//当用户01存在时才注册用户02公共用户user02(){返回新用户(2, bob , 666666 );} }主应用程序

  包com.limi导入com。李米。实体。用户;导入org。spring框架。靴子。春季申请;导入org。spring框架。靴子。自动配置。弹簧启动应用程序;导入org。spring框架。语境。可配置的

  pplicationContext;@SpringBootApplicationpublic class MainApplication { public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); if(run.containsBean("user01")) System.out.println((User)run.getBean("user01")); System.out.println("user01 不存在!n"); if(run.containsBean("user02")) System.out.println((User)run.getBean("user02")); else System.out.println("user02 不存在!n"); }}运行结果

  

 

  

 

  

2.指定组件存在时

MyConfig

 

  

package com.limi.config;import com.limi.entity.User;import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;import org.springframework.context.annotation.*;@Configurationpublic class MyConfig { @Bean public User user01(){ return new User(1, "andy", "123456"); @Bean @ConditionalOnBean(name = "user01") //当user01存在时才注册user02 public User user02(){ return new User(2, "bob", "666666"); }}

MainApplication

 

  

package com.limi;import com.limi.entity.User;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class MainApplication { public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); if(run.containsBean("user01")) System.out.println((User)run.getBean("user01")); else System.out.println("user01 不存在!n"); if(run.containsBean("user02")) System.out.println((User)run.getBean("user02")); else System.out.println("user02 不存在!n"); }}

运行结果

 

  

 

  

 

  

3.完整代码

 

  pom.xml

  

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.limi</groupId> <artifactId>springboot-test1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!--打包插件, 使用它可以把项目打包为jar包--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>

User

 

  

package com.limi.entity;public class User { private Integer id; private String userName; private String passWord; public User(){} public User(Integer id, String userName, String passWord) { this.id = id; this.userName = userName; this.passWord = passWord; } @Override public String toString() { return "User{" + "id=" + id + ", userName=" + userName +  + ", passWord=" + passWord +  + }; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; }}

MyConfig

 

  

package com.limi.config;import com.limi.entity.User;import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;import org.springframework.context.annotation.*;@Configurationpublic class MyConfig { @Bean public User user01(){ return new User(1, "andy", "123456"); } @Bean @ConditionalOnBean(name = "user01") //当user01存在时才注册user02 public User user02(){ return new User(2, "bob", "666666"); }}

MainApplication

 

  

package com.limi;import com.limi.entity.User;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class MainApplication { public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); if(run.containsBean("user01")) System.out.println((User)run.getBean("user01")); else System.out.println("user01 不存在!n"); if(run.containsBean("user02")) System.out.println((User)run.getBean("user02")); else System.out.println("user02 不存在!n"); }}

到此这篇关于SpringBoot深入探究@Conditional条件装配的使用的文章就介绍到这了,更多相关SpringBoot @Conditional内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: