javascript
2.springboot-凯发ag旗舰厅登录网址下载
04-springboot自动配置-切换内置web服务器_哔哩哔哩_bilibili
顾名思义:条件。有点类似于if语句,只不过是通过注解的形式来实现。
以一个实际需求来学习该原理:有一个实体类user,想要创建该实例化对象,必须导入某第三方包(这个第三方包名必须可以自己设定),否则无法创建user的实例化对象。
先看project的结构,
- classcondition.java :@conditiononclass注解的实现类,他人不可调用。
- conditiononclass.java :注解,供他人调用的注解。
- userconfig.java :起控制作用,根据程序员设定的conditioal判断是否新建user对象并返回。
- user.java :实体类,bean类。
- springbootconditionapplication.java:在此文件中获取user这个bean对象
举个例子:
相当于一个水龙头流水的案例,user这个bean就是我们想接的水,userconfig就是出水的那个管子,classcondition和@conditiononclass注解就是控制水流的水龙头,只不过classcondition是@conditiononclass注解的实际实现,外面的人使用@conditiononclass注解即可,不用关心水龙头里面的构造。
2.1 classcondition.java
实现condition接口,需要重写一个boolean matches()方法,该方法返回true/false,返回的真值就类似于if判断的结果。
package com.itheima.springbootcondition.condtion;import org.springframework.context.annotation.condition; import org.springframework.context.annotation.conditioncontext; import org.springframework.core.env.environment; import org.springframework.core.type.annotatedtypemetadata;import java.util.map;public class classcondition implements condition {/**** @param context 上下文对象。用于获取环境,ioc容器,classloader对象* @param metadata 注解元对象。 可以用于获取注解定义的属性值* @return*/@overridepublic boolean matches(conditioncontext context, annotatedtypemetadata metadata) {/*//1.需求: 导入jedis坐标后创建bean//思路:判断redis.clients.jedis.jedis.class文件是否存在boolean flag = true;try {class cls = class.forname("redis.clients.jedis.jedis");} catch (classnotfoundexception e) {flag = false;}return flag;*///2.需求: 导入通过注解属性值value指定坐标后创建bean//获取注解属性值 valuemap2.2 conditiononclass.java
这是一个注解类,右键annotation即可新建。
里面通过@conditional(classcondition.class)来和他的实现类classcondition.java完成绑定,外面的人直接使用@conditiononclass注解即可,不用关系它的实现类classcondition是怎么实现的,相当于一层封装。
里面有一个string数组value,这个就是用来将外面的人传递给注解的参数传递给实现类classcondition.java。
package com.itheima.springbootcondition.condtion;import org.springframework.context.annotation.conditional;import java.lang.annotation.*;@target({elementtype.type, elementtype.method}) @retention(retentionpolicy.runtime) //运行时指定 @documented//下面这个注解需要特别关注,就是考这个注解将conditiononclass和classcondition绑定到一起的 @conditional(classcondition.class) public @interface conditiononclass {string[] value(); }2.3 userconfig.java
@configuration注解对象,会自动加载其中的config,下面的config主要完成的功能就是根据程序员设定的conditional条件判断是否新建对象并返回给调用者。
在这里面使用刚才新建的注解。
package com.itheima.springbootcondition.config;import com.itheima.springbootcondition.condtion.classcondition; import com.itheima.springbootcondition.condtion.conditiononclass; import com.itheima.springbootcondition.domain.user; import org.springframework.boot.autoconfigure.condition.conditionalonclass; import org.springframework.boot.autoconfigure.condition.conditionalonproperty; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.conditional; import org.springframework.context.annotation.configuration;@configuration public class userconfig {@bean@conditiononclass("com.alibaba.fastjson.json")public user user(){return new user();}/*** 下面这个case是调用现成的,不用我们自己写* @return*/@bean@conditionalonproperty(name = "itcast",havingvalue = "itheima")public user user2(){return new user();}}2.4 user.java
实体对象类,自由添加即可。
package com.itheima.springbootcondition.domain;public class user { }2.5 springbootconditionapplication.java
在此函数中调用userconfig中的函数获取user这个bean的实例化对象。
package com.itheima.springbootcondition;import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.context.configurableapplicationcontext;@springbootapplication public class springbootconditionapplication {public static void main(string[] args) {//启动springboot的应用,返回spring的ioc容器configurableapplicationcontext context = springapplication.run(springbootconditionapplication.class, args); /*//获取bean,redistemplateobject redistemplate = context.getbean("redistemplate");system.out.println(redistemplate);*/object user = context.getbean("user2");system.out.println(user);}}大部分情况下不需要我们自己写。
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的2.springboot-condition的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: