00:00
各位同学大家好,刚才呢,咱们分析了基于反射实现IOC的功能,咱们把实现的步骤给各位做了分析,那下面呢,我们按照步骤咱们开始进行具体实现,首先我们先做第一步,咱们在项目中建一个子模块。那我现在在里边做个创建这个模块,我给它起个名字就叫at硅谷杠。把这个我们先进行创建。这是我们的第一部分。然后把这个创建之后,我在这里边咱们创建两个测试类,为了后面我们进行测试,首先我先建个包,com.at硅谷。Service。然后service里边我先建一个service的接口,比如咱们叫U。然后创建之后,我这里边再建个包。这个包我们叫ML,然后创建一个接口的实现类。
01:07
让他实现这个接口。User service,这个我们完成创建,创建之后我们在创建一个包,就是DAO,把它的接口时间内我们进行创建,为了后面我们进行测试。现在啊,我快速创建下。U do接口。然后在里边也是再建个包,建它的实现类。这位置U色DAPL实现这个接口U色do,所以现在这个最基本的准备工作就完成了,咱后面怎么做呢?在里边来完成它这个调用的这个过程,通过它实现Switch里注入DAO,最终完成它的最终内容,啊,这是我们要做的这么一个基本效果,然后这过程中注意啊,如果说按照我们之前的方式,那很简单,我在service类上边加个注解,比如咱们叫service。
02:11
然后在do的上边我加个注解,比如用这个叫,然后里边怎么做一个注解叫,这是不是可以把do给它就注入进来了,大家注意这咱之前讲过,这应该很简单,但是现在我怎么做,我想自己写两注解,一个注解用于bin对象创建一个注解与注注属性,而咱不用它,这个注解最终就实现。这是我们要做的功能,那下面呢,咱们开始继续做一下,目前就是第一步,第二步完成了,下面来看第三步,第三步呢,我们自己来建两个注解,然后在里边实现它这个具体功能,那下面我来做个创建。我在里边写一下,咱们还是在创建一个包,我们再来一个包。
03:04
这里啊,我建个包,这个包呢,注解嘛,叫noation,我就简写了an nonoation。然后里边建两个注解,首先啊,注解是这个,咱们建第一个注解就叫做B这个注解,然后用它来创建我们的对象,咱先创建一会再完善啊,然后再来建第二个注解,这个第二个注解呢,我就叫Di,用于后面的注属性,然后创建之后,各位注意啊,咱要指定一下注解它的应用的范围,或者它在什么时候生效,这个咱需要做个指定,那怎么指定呢?在注解上面有这么两个圆注解,咱们看一下啊,第一个指定它在什么地方用,比如这里边写一个type,表示在类上边,在接口上能用,这表示它的作用范围,它在运行时生效,那咱就把这个加进去,放到咱这个B的注解上。
04:03
我把这个拿过来啊,在运行时生效,然后它是用在类上面,或者用在接口上面是可以的,因为我们要把这个用在我们的类上面。这是我们的B这个解,用它对,然后还个Di这个呢,让它用在我们的属性上,大家看是不是叫field属性,它也是在运行时生效。这个给他也过来。所以现在啊,咱们把这部分我们就完成了。我把这个啊给它直接入过来。相关的依赖。给大家注意里边的这个特点,这就是我们的第三步,建两个注解,一个注解用于创建对象艾特B,一个注解Di注属性,如咱后面我们可以这么做,在上边咱就不加这个注解了,加上我们这个B进行注入,然后这里边就不加这个了,加一个叫Di,完成这个才能操作B创建对象。
05:06
Di进行输赢注入,这是我们后面要达到效果啊,咱们先做一个准备工作,这是我们的第三步,然后这个之后下面进入到第四步。第四步做什么呢?咱要建一个B容器的接口。那我在里边做创建。我在这位置呢,咱们建这么一个包,这个包我就叫B,然后在包里边我建个接口,这接口咱们还是跟之前那名字一样,就叫application contest啊,当然你叫别的名字也可以啊,为了跟之前看着方便,咱还是叫这个名字application contest这里边我接口。然后完接口之后,在接口中写在I厂就返回对象,那我这里边就直接返一个对象了,咱们叫object,我叫get b。
06:08
然后在里边就传那个啊类型的class就是class。CZ。这是我们写的这么一个接口,就是B容器接口,所以这一步完成,完成之后下面进入到第五步,在第五步中咱就实现这接口,且它的具体实现包括返回具体对象,包括在里边设置它的扫描规则,根据包里边的类上的注解完成对象的创建。那下面我们继续写下。我这里继续来完成一下。我们在里边,比如说我建一个它的实现类,呃,这实现类的名字随便起,我为了各位看到方便,跟课件中保持一致了,还是叫这个名字,No application。T,让它实现我们这个接口applicationtest,然后里边方法需要咱们进行实现。
07:07
也就是这个方法,然后在方法里边,咱把它直接做一个返回就可以了,那怎么返回呢?给大家说这过程啊,大家注意,咱讲IOC中提到我们IOC创建之后,那个对象是不是要放到一个地方去啊,在此里边放到的是是一个集合中啊,所以咱们现在我们也这么做,咱们创建一个map集合,用于放咱们那个B的那个实例对象。我们也做过创建。就是模拟出LC那个场景,那我写一下啊,加上一个private map map中有K,比如说个。
08:01
你可以叫别的名字啊,都可以。等于妞上一个哈西外跑。这是我们创建一个map集合,后面咱们的对象都放到这里边,然后之后各位注意啊,这个方法是返回我们创建之后那个对象。对象,所以咱们从map中把对象给它直接取到就可以了,那我点上一个方法叫get入它这个这个K的值,根据K返回的对象,这是咱们解决方法,然后写完之后下面呢,咱要设置一下它那个包的扫描的规则。就是我之前提到的。当钱包。及其子包里边。如果说哪个类上边有咱们刚才说那个B的这个注解,那把这个类。
09:03
就通过反射进行实例化。所以咱们下面就来做这个过程,那这个怎么做呢?咱们来看一下啊,大家注意咱们呢,之前写代码的时候呢,我们都是这么来做的啊,咱随便找一个啊,大家看一下。之前我们是这么做的,比如说我们随便找一个测试类。大家看咱们new的时候,里边是不是要么传配置文件,要么配置类,就是通过它的构造直接传这个值,所以现在我们也这么做,我写一下啊,我们创建它的有参数的构造,然后传递就是咱那个包的路径,然后根据它设置你的怎么规则。这是我们要做的事,比如我传一个com at,硅谷,根据这个包设置扫描规则,我传一个com at,硅谷死六,根据这个来设它的规则,所以咱们写一个有参构造,最终进设置。
10:01
我这里写下啊,Publicno application里边加上这个路径。咱们加上一个啊,比如叫这个base package。然后最终在里边进行设置。
我来说两句