00:00
啊,老师强调一点这个工具啊,你今天上午可以copy我了。行吧,这个东西咱们在这个闲暇的时候,就晚上或者是这个周末啊,没事的时候再背OK吧。今天上午还是那句话啊,争取给整完一晚啊,好吧啊,耽误点这个吃饭的时间,为咱们这个项目做准备嘛,反正过两天做项目对吧,中午就得忙起来了是吧。行,咱们来看业务层啊,上面关关一下业务层。业务层我们还是得先来接口student service OK了,对于现在这个业务层来讲的话,就是一个添加的业务,一个根据ID传单条的业务,对吧。好行了啊,这两句我就先粘一下啊。好。然后在这个业务层下,我们需要来一个子包,叫做ipl,好,来一个class啊,Student service IL employ student。
01:15
Service。OK。行,咱们这回得调这个倒层,大家注意啊,这个倒层我们习惯于写在这个长远变量上,为什么写在长远变量,因为这个倒层的操作啊,绝对安全,OK吧,好,那么咱们这个倒层写到乘以变量,是不是所有的这个方法都能够用到这个倒层的这个对象啊。好,来一个private student来个student。点O等于六,出来一个student DAO,这是一种什么语法,同学们。是多肽啊,接口等于六出来一个实线内。哎,那我这么写行不行。
02:02
没问题,对不对。没问题吧,没问题,但是我现在还是选择使用这种形式,为什么?为什么?什么叫面向接口编程呢?大家想一想啊,我们现在这个student d啊,大家注意看啊。现在是不是一种ipl这种普通实现类的形态?什么是多了?行,给你们来一个基础方的啊,叫什么animal a等于new。New dog,我在这个做new dog之前,我知不知道这个动物它是什么?不知道,当你溜出来一个dog,我知道这是这个动物,它是一条狗,对不对?当我溜出来一个cap,我知道这个动物,它是一只猫。
03:01
那啥叫堕胎,是不是有一个抽象类,或者是接口它的这个对象啊,因为它不具体,只有当扭出来一个具体对象的时候,那么扭出来一个具体类的时候,我才知道这个对象它到底是什么,对吧?一个抽象的事物,它同时具有多种形态,是这样吗?好,也就是说动物啊,它很抽象,为什么说它抽象呢?因为我不知道啊,你说动物。我鸡也是动物,猫也是动物,鸭也是动物,是这样吗?它太抽象,但它具有你看动物,它说具有鸡的形态,具有猫的形态,具有狗的形态,具有什么老虎的形态,是这样吗?好,那大家注意啊,现在看我这个student和DA啊。他现在是不是只具有咱们普通实现类ipl这个实现类的形态。那将来呢,它不一定具有什么形态啊,OK吧,也就说将来这个东西啊,咱们有可能要给他改用别的更好的倒层的形态,OK吧,好啊,但是现在暂时咱们只有这一个形态,OK吧,行,我们现在来一个student s等于student DAo.get by。
04:19
好,把S返回好下边这个save。来一个student do.saves传递进去啊,好,对于业务来讲的话,如果是正酸奶茶数调一下倒层就行啊。没错吧,跟咱们以前转账的业务比不了啊,以前转账的业务你想想是不流程很多,掉了很多次倒层啊,但是你仅仅只是基础增生改查的业务,是不是调一下倒层就行了,对吧?行业务层也搞定了啊。接下来我们来看做一下这个测试了。我现在来一个。哎,这个咱们一块来吧,我先把这个业务层先创建出来行吗。
05:02
Student service等于new student service impl,这个是不是业务层对象?没有意义吗?那那我继续往下写了,我现在要做一个添加操作,我可写了啊。嗯,行啊,你们都不阻止我,我就继续写了,来student行吧,S,咱们来一个啊,我现在新添一个啊,Set id000。是不是还是六啊,我看看。蔡徐坤刚才让我干掉了是吧?行,我再给他加上啊。再去个s.set h,咱们来个二三行吗?SS咱们调一个什么,是不是业务层调一个save方法啊。
06:01
OK吧,把这个S传递进去,OK吧,你就记住啊,将来在咱们这个顶层啊,就是控制器里边,它具体的活他不干,他肯定是调业务层,让业务层的这个方法来帮我干活,能理解吧,好。那现在咱们来SAVE1把啊,RUN1下面我们来看看最终的这个结果啊,大家看一看好哎,这个这种结果还是比较面熟的是吧。啊。为什么呢?为什么呢?因为我们现在所用到的student service这个接口的对象SS,它是什么形态的同学们。什么心态?这是多肽吧,是多肽,那这个接口对象SS它是什么形态呢?
07:05
Ipl普通实现类形态,说白了,这个东西是张三形态还是李四形态的业务层对象?张三。你用张三形态的看看啊,我掉个倒层就完事了,走事物吗?步骤,我们想要走事物必须得写哪个形态呢?说李四形态啊,对不对?好,所以说啊,我们得来一个student service ss应该来个李四形态,怎么写来,咱们是不是给它封装到这个工厂里去了,Serviceer factory,这个是我刚才写的吧。Get service怎么着?是不是传张三取李四这么一个过程啊,New student?Service imppll,好啊,这个啊,我把上面给注意一下,那下边咱们还得强转一下啊,好,现在请告诉我,这回我这个SS对象是张三形态还是李四形态,李四形态掉废方法谁走?
08:18
谁走?谁走,注意看啊。是不是动态在里边的invo走啊。没错吧?注意了啊,老师我也没调这个invo,但是这个invo它其实的内部生成的这个大家注意啊,在程序执行的过程中,人家虚拟机自动的给我生成一个什么叫class李四这个类能理解吧,这个类里边它所生成的这个C方法,其实给我调的就是这个应用,你给我记住了啊,现在啊,咱们再来分析分析,同学们这块必须弄清楚了。这个SS,请告诉我是张三还是李四,李四李四调这个save,谁知。
09:09
这个音卧走能理解吧,In work,走走走走走走走,大家注意啊,走到这一行,37行是谁走?张三走,张三走完之后提交事物毫无违和感,以后就是这么玩,能理解吧?好,那现在我们唯一需要注意的,唯一需要注意的是什么呢?老师,我为什么调的是一个名称为点save的方法,但偏偏我走的是这个点invoke这个名字的方法。其实这些东西都不用我们去操心,OK吗?你想一想啊,李四的这个类咱们是不是没有,是在程序执行的过程中,人家动态帮我生成的OK吧,所以说这个点这个方法其实也是动态生成的,我们现在没有李四,人家动态生成一个李四OK吧,其实人家在内部给我生成的这个C方法里边,其实给我调的就是这个荧光。
10:03
OK吧,你就给我记住了,我们走李四形态调这个业务方法,走的就是动态代理这个in work,只有走这个work,我们才能走事物,OK吧,好。我现在来测试一下啊,同学们啊,走一个,这回再来看一看啊,正好测一下咱们这个动态代理啊,看看好不好使啊commit。那看来是好事。刷新是好使了,行没有问题啊,那咱们现在来想一想啊,那将来咱们是不是在使用业务层的时候,是不是同一应该使用什么李四的形态啊。OK吧,因为张三形态不走,事物是这样吗?以后统一走李四形态,OK吧,好行,这是一个天加啊,呃,我们再测刚才那个根据ID查单条,咱们再测一个啊。
11:01
来这个叫测试添加操作,好,接下来咱们再来一个测试什么呢。测试。根据ID查单条操作好SS,咱们来调一个点get by ID我查查A001反一个student。底层都已经写好了啊。来S把这个S啊给它输出出来。OK吧,这个就是咱们所要的这个结果,OK吧,哎,那现在是不是有一个小小的问题,也就是说。我现在做的是一个查询呢,我有没有必要走李四形态的业务?是不是没有必要啊,哎,走张三形态是不也可以啊,因为做查询咱们没有必要提交事务,或者会回滚事务,是这样吗?
12:09
OK吧,但是大家注意啊,刚才老师也说过了啊,我们将来实际项目开发呢,其实是分成两种情况,一种情况是什么?大家注意啊,一种情况是统一使用屡次形态,这种形式的这个好处是什么呢?它的好处是你看啊,咱们现在啊,你get by ID,大家注意啊,咱们走一个业务层,Get by ID,确确实实用一个到层数就行了,将来如果这个业务得到的一个扩展,咱们需要使用到这个里边集成的一些添加或者修改的操作。能理解吧,那咱们是不是到时候还得使用李四的形态,你看现在不用,但是将来有可能在业务层扩展一些添加或者修改的操作,OK吧,所以说啊,咱们统一使用李四就可以完全的代替张三,能理解吧,好,即使是查询,咱们也统一使用李四,这是一种形式,第二种形式呢,其实我们将来是可以为事物提供一种啊策略的配置机制的,也就是说对于事物的来说,对于事物来说,它这个策略有很多OK吧,比如说我们可以配置这个策略啊,当我在走。
13:19
这个get by ID的时候,它是一个查询操作,对不对?如果以前呢,我现在是套在一个事物当中了,那么我就融入到这个事物,我不能把这个事物掐断,能理解吧,我不能根据它我就把这个事物给掐了,因为我不需要事物,对不对,OK吗?如果以前有一个事物了,我这一条查询,我就融入到这个事务当中,如果以前我没有开启过事物,我这一条也不开启事务,OK吧?但是如果你是一个添加、修改、删除操作呢?我必须得干嘛呢?开启一个数,这些都是可以通过配置文件去配置的。这就比较高级了,以后那个什么生命是事物,你们得怎么至少得造个至少半天得去学这个东西,OK吧,好,这个到时候再说呢,OK吧,那对于我们现在暂时来讲的话,所有的操作一律干嘛呢?理四形态走事物OK吧,行了,这个。
14:12
小练习啊。
我来说两句