简单认识一下SpringBoot自动配置原理

一,首先做一个测试:

        1,将SpringBoot项目里的一个组坐标注释掉

         2,在启动类运行测试,看看容器中有没有刚刚注释掉的模板类

         3,测试结果1:当没有坐标时,运行报异常,没有这个类NoSuch.....说明这个类没有被注入容器。

        4,我们再将坐标加上

         5,运行结果2:成功获取对象地址,说明该类已经被注入

 分析:SpringBoot根据坐标自动完成配置注入

为什么会这样?

两个条件,1:坐标,,2:@Conditional注解

二,@Conditional 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。

1, 通过分析源码可以很清楚的发现,这注解可以修饰类,方法,运行时生效。

还有个数组类型的value属性,该属性可以绑定值(类),且必须是Condition的子类。

2,我进入这个Condition看看,发现它是个接口,里面有个返回值是Boolean方法,且有两个参数。

 2.1通过分析可以发现,如果这个matches方法返回false,则Conditional条件不成立,反之则成立;

 

3,那我们是不是可以直接重写这个选择器呢?

首先我们创建一个配置类,然后使用注解@Conditional,value的值是我们自己继承且重写的match方法 的类

 3.1来看看我们的match

 

重写的这个match方法的意思是:如果没有redis这个类,则返回false,Conditional就不选择注入

 3.2这里我把jedis注掉了,没有jedis坐标

3.3我们测试看看,获取id未user的类

 运行结果,是这个找不到该类的异常

 3.4我们将jedis坐标加上,

 运行结果;

 成功获取到user的地址值!

这时候问题又来了,我们发现,这似乎只是个静态的选择器(判断条件写死了!)?那我们项目里那么多坐标,那么多类,总不能一个坐标一个选择器吧?

当然不是,下次我们将进一步分析 动态注入

将类的判断定义为动态的。判断哪个字节码文件存在可以动态指定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值