00:00
好,接下来呢,我们再来看一个spring为我们提供的强大特性,按照条件给容器中注册B,那么这个呢,就是我们接下来要说的,我们一个注解叫condition no,诶,这是在spring4.0以后呢,我们来添加的一个功能,而且这个注解呢,是spring底层大量使用的这个注解,它的作用呢,就是能按照一定的条件进行判断,满足条件。然后呢,满足条件给容器中注册B,而B应的注册,哎,不像是我们原来只要写一个at b,那我们就一定在容器中会注册,但是呢,如果我们加了条件,就是不满足条件,容器中也是不注册的,我们来做一个测试,比如我给容器中注册上两个,这是。
01:08
PRESENT01。那么这个呢,们用一个好,我们来用他的有参构造器,比如呢,我们就叫比尔盖茨,哎,我创建一个比尔盖茨,他的年龄呢,大概也60多了,是吧,62。好,那么呢,我们把它加在容器中,它的这个ID就角边,那么呢,我们再来创建一个person person02。好,上边呢,我们刚创建了一个Windows之父是吧,我们现在呢,再来创建一个Linux之父,哎,我们叫李娜斯,好,那么呢,现在呢,我们就来。
02:07
他的年龄我先一给也应该是40多了啊,50了将近好48,现在呢,按B把它注册在里边给四好,那么呢,现在有这两个人,那默认的情况下,我们这两个人是不是一定是都在容器中呢?我们来进行一个测试,阿里克testan。好,那么呢,经常要用咱们这个配置,我就把它复制过来。放在这儿。好,现在呢,我们来看,我先拿到IC容器中所有person的定义,Gets。
03:06
来拿,我们看容器中现在有几个人?以及他们的名字都是什么,放一下。叔叔,叔叔,Names name。好,我们来看容器中呢,有三个,一个是person,一个是比尔,一个是李纳斯,那么呢,包括我们把这些对象也能打印的出来,来把这三个对象我们也获取出来,Get get,咱们这个B影啊,我们按照类型获取,但是呢,我要获取这个类型的所有鼻影,那我们来往下找,这有一个。
04:02
慢。我们找到找到这个所有person的定义的。啊,我就直接把它输出,那么这个对象啊,以及他的这个ID,我们都在这个里边,就是ID,就是呢,我们注册容器的这个对象,比尔盖们这个12这个已经在这儿没问题,但是呢,我们现在的要求就是。如果我们当前操作系统是Windows系统,那你呢,在器中就给我放一个比尔盖茨,如果你的这个操作系统是nux系统,那我们就放一个纳,现在呢,有一个条件就是如果系统是Windows啊,我们呢就又放咱们这个点词,这个比给容器中注册啊,如果是Linux系统,如果是Linux系统,那么呢,我们就给容器中注册咱们这个纳斯,那么现在呢,这是我们的要求,那么首先我们来说能不能获取到操作系统是什么呢?这是可以的,哎,我们有一个,咱们这个有一个变量,比如呢,我们这个用applicationest获取到一。
05:42
这些配置get property,哎,我们这个操作系统,我们能获取一个变量叫OS点,这是来获取我们操作系统的名字,输出一下。
06:08
好,我们来看一下,好,这个操作系统呢,默认叫WINDOWS10,哎,我们现在是这个WIN10操作系统,可以通过这样来获取,动态的获取我们这个环境变量的一些值,获取环境变量,好,那么呢,我们现在要实现这个效果,就得结合我们说的这个conditional主写,那这个conditional呢,我们来点进去,哎,来找c shift加t comeal,那么呢,这个注解可以标在类上,也可以标在方法上,哎,我们在方法上是创建being的,所以说呢,我来标在方法上condition,那么标在方法上这个注解怎么用呢?诶这里边呢,要传一个condition condition呢,就是我们这个条件。
07:09
啊,那么这个条件呢,点进去这是一个接口,我们写它的实现类来,有一个方法返回布尔,也就是说如果是处,那就条件匹配成功,如果是false,条件匹配失败,所以说呢,我们这里边要传一个condition数组,哎,它里边。穿的是一个condition舒服,好,那我就来写上写我们第一个条件,那我们来就来创建上几个条件。好,我们把这个条件我们都放在这个下边,好,第一个呢,我们就叫Linux condition。另外一个呢,我比如叫Windows condition,第一个Linux condition是判断系统是不是Linux,这个是判断操作系统是否Windows,这个判断是否Windows系统。
08:07
那么呢,这一块是来判断是否Linux系统好,我们说这两个要成为判断条件,我们必须实现,必须实现condition接口好,我们把这个接口注意啊,是我们这个spring framework contest下边好,我们把啊添加为实现的方法,在这个方法中呢,有两个参数,第一个参数叫condition contest,哎,这就是呢,我们这个。判断条件。啊,我们这个判断条件能使用的上下文环境,能使用的咱们这个上下文,也就是我们说的这个环境,那么呢,第二个叫a not。
09:11
A not,咱们这个type是这个注释注,这个当前标注了这个注解的,咱们这个注释信息,好,那么呢,我们就想在这判断一下我们这个是否Linux系统。是否Linux系好,那是否Linux系统呢,我们来就来判断一下点二,诶你看呢,在这个上下文环境里边能获到这么多东西,第一个叫那么呢,这就是获取我们这个B的创建工程,第一个是能获取到啊咱们这个啊LC使用的当前的B工厂。
10:02
咱们这个B方,这个B方呢,就是创建对象以及进行装配的这个工厂,那么呢,我们来看第二个,第二个呢,有一个叫get class也能获取到这个类加载器。获取咱们这个类加载器,那么呢,我们再来看,还有这儿还能获取诶environment,这是来能获取到环境的,这个环境呢特别重要,它里边呢,就封装了我们这个当前运行时的一些信息,包括环境变量,包括我们虚拟机的一些变量啊,我们都能拿到,所以说呢,这是获取当前环境信息,好,那么呢,还有我们可以都看一看,还有一个叫get registergry,它会获取一个叫being DeFinition registergry,这时呢能获取到B定义。
11:09
宾定义的,咱们这个注册啊类,然后所有的宾定义都在这个里边进行注册,哎,我们可以在这里边查有没有哪个鼻影的定义,或者呢,我们也可以用它来注册一个比,你点进去可以看,诶他们里边的方法,我们能注册一个比应的定义,也能移除一个比应定义,也能查询一下咱们这个比定义,或者呢,还能看到我们这个容器中是不是有一个鼻应的定义等等等等,那么呢,这就有这么多东西,而我们现在要判断操作系统,我就用这个environment environment。environment.get get get property,我来获取OS点内,哎,这是我们之前说获取操作系统用的这个东西,那我们就来判断property点,哎,我们来做一个什么判断呢?来判断它是不是Windows啊,嗯,就来写一个。
12:15
这个关掉。刚才。好,等content,我就来判断一下,它是不是包含contents,是不是包含Windows,哎,这个我们之前打印的那个WINDOWS10,它W是大写的,好,我就做这么一个判断啊,好,它是不是包含Windows,如果是,那就返回处,说明它当前是Windows操作系统,那么呢,同样的,诶,我们这是判断Linux,那好,我们就来写一个Linux,如果是Linux,那就返回处,那同样Windows的判断条件我也来实现一下。Condition。
13:01
接口好,添加未实现的方法,然后呢,我就获取到当前的环境信息,Get environment。好,来看environment里边我们来get一个property property呢,我们就来写一个OS。这个呢是来判断是否Windows,我们如果proper,第2CONTENTS,咱们这个Windows如果包含Windows,那我们就来返回to,否则返回false,这是我们写好的两个条件,一个判断是否linus系统,一个判断是否Windows系统,那接下来我们在这个conditional里边,我就来写上这个比尔盖茨呢,我们就来加上一个条件,我们叫Windows。Windows condition就是我们这好,那同样的我们在下边也加一个条件,Condition。
14:07
一个Linux。就是第二拉斯,那我们这两个条件加上以后,哎,我们再来看我们容器中比尔盖茨以及林纳斯是不是会存在。好,现在呢,看一下走。来看啊,我们现在当前的环境,我们获取到的是WINDOWS10,哎,按照我们这个条件,比尔盖茨是进来了,但是李纳斯没进来,也就说呢,我们在这儿进行Windows判断成功,而Linux判断失败了,那么呢,我们可以试一下Linux,当然我不可能切换操作系统是吧,我们就来在这里边呢,添加一些运行变量,点figu,我们配置一些运行式变,在里边配置一些虚拟的数,加上一叫固定OS内,把它变成Linux,好,我点一个运行,哎,现在的操作系统我们获取出来,打印出来是linu克S,而它里边就有李纳斯,也就说呢,我之前Windows的时候有比尔盖茨,Linu克S的时候有李纳斯,比说现在就是按照。
15:28
条件进行的动态装配,包括我们写条件的时候,哎,我们还可以做更多的东西,比如我们来到Linux里边,我们也能拿到这个being DeFinitiongry,我们也可以做更多的判断,比如我判断你容器中是不是包含某一个being啊,比如我们来看啊,容器中呢,我们是不是包含person呢?如果有person,我也给你注册表。来做这么一个判断,容器中是否包含person,就说呢,我们可以做各种判断,包括如果没包含,我们还可以在这利用registry。
16:09
第二,我们还可以register啊,我们还可以注册一个B的定义,当然这个注册我们后来再去说,它就说呢,我们可以做非常多的判断条件,所以。判断容器中,容器中啊B注册情况,包括呢,也可以给容器中,也可以给容器中注册等等等等,也就是说呢,这是我们的使用条件,判断给容器中注册组件。另外呢,我们来说这个conditional注解,哎,它不只能标在方法上,那标在方法上的话呢,我们是当前的这个B,按照条件判断,我们还可以把它标在类上,哎,比如呢,我把它CTRLX,我们来放在整个类上面,整个类上边的放法呢,它的含义就是说来满足当前条件。
17:10
满足当前条件,那接下来呢,这个类中配的所有的这个病应注册才会生效,这个类中配置的所有并应注册才能生效,所以说呢,我们来看我们现在呢是Windows condition,哎,我现在把条件放在这儿,我们来运行一下,但是我们之前运行的时候呢,我调成的是。Linux那么呢,应该就是容器中一个都不会有,我们来看一下,诶,我们来看确实一个person都不会有,所以说呢,这是对类进行统一设置,也可以放在类上来进行统一设置。类中组件统一设置好,这就是我们这个conditional注解的用法。
我来说两句