00:03
好了,看老师屏幕了啊。行,刚才咱们完成了一个这个circle session对吧,除了咱们这个取得session对象,以及咱们关闭这个赛事对象之外啊,我们也可以把什么呢?这个提交事务,或者是这个回滚事务啊。也可以以这种方法的形式写到这里面,都可以OK吧,都可以啊好。呃,我们现在来写一个很重要的类,叫做动态代理啊,我们之前学习的那个代理模式,对吧,咱们那个代理模式首先是用在哪一层呢同学。Service层业务层是这样吗?我们是不是应该在这个业务层来使用这个代理啊,对不对。
01:03
使用代理类的这个目的是什么?如果我们不加代理的话,在业务层处理业务逻辑的时候。一大串对吧,这一大串这个与数据库交互这个代码啊,或者业务执行的这个流程,肯定得要么一起成功,要么一起失败,咱们得处理事务,是这样吗?啊但是呢,我们传统的这个业务层在这里边处理这个事务啊,不是很方便,是这样吗?他不方便在哪呢?同学们,它不方便在以下两点啊,第一点是什么呢?我们在业务层中大家注意啊。既然Mac已经分工明确了,那么我们在这个后台写业务层的时候,他应该只关注什么呢?业务逻辑本身是这样吗?不应该关注与业务逻辑本身之外的内容,比如说事务操作是这样吗?好,第二点是什么呢?我们这个事物本身啊,它是属于一种这个数据库相关的这个机制,对不对?业务层又掺杂了与数据库相关的这个机制,这一点不太好,是这样吗?好,那如果啊,咱们要是硬说一个这个第三点的话啊,其实还能说就是什么呢?咱们有几大开发原则,其中有一项是单一职责的一个原则,那将来你想一想,咱们这个控制器是不是就是用来接受并处理这个用户请求呢?对吧?业务层就是用来干嘛呢?处理业务逻辑的倒层就是用来与数据库做交互的,是这样吗?单一职责呀,也就是说你每一层这个代码应该只干我自。
02:43
己分工明确的这些活不应该接触其他的活,是这样吗?你看这个业务层啊,又掺杂了什么呢?这个除了业务逻辑之外,又掺杂了这个事物相的这个代码,它变得不单一了,是这样吗?啊,不方便管理了,所以说呢,我们应该把这个事物相关的代码给它抽取出来,形成一个代理类,但是你可以想一下,我们将来所有的业务层都需要加代理,都需要加事务,我们不可能针对于每一个业务层的实现类。
03:14
去给他创建一个代理类,这个是不可能的吧,我们之前是不是学过一个张三和李四的那么个例子,对不对。啊,你想啊想这个问题啊,我们每创建一个张三,张三指的是什么。业务层的这个普通的实现类是这样吗?就得必须搭配这个张三,创建出来一个李四来为张三来处理事务,这个没错吧,李四是不是就代理了呀?那我创建100个张三。那你得创建多少个李四100个李四一个张三对应一个李四,对吧?开发量倍增,写起来太麻烦了,是这样吗?所以说啊,我们干脆把这100个李四全都干掉,统一使用什么?动态代理,在我们程序执行的过程当中,动态的创建出来代理类,以及从代理类生成一个代理类对象帮我们处理事务,是这样吗?
04:11
OK吗?这是不是动态代理的这个作用啊,动态代理的作用啊,统一起来啊,也就是说他要最终达到的目的是什么呢?我们先100个张三怎样。共用一个李四,而且这一个李四咱们就写通过动态代理啊,相当于写了一个模板,其实动态代理这个李四啊,它是什么?在程序执行的过程中生成的一个点class文件,是这样吗?它是没有点加va文件的,我们没有李四的OK吧,正所谓动态代理指的是在程序执行的流程当中,在虚拟机中给我们生成一个点class文件,OK吧,我们之前是不是你每写一个张三写个李四,咱们写的时候点Java文件呢,对不对?啊,这个点项文件没有我们没有写的,人家直接自动给你生成一个点文件来执行,OK吧,好,我们现在来创建一个啊来事物是怎么说来的Che。
05:06
Action对吧?动态外理怎么说in?Handle啊,Transaction invocation handler OK吧,好,我们基于这个D啊,为我们提供的动态代理的机制啊,来一个implement什么,你们说我写。Invocation handler来自于哪个包这个?啊,反射包包对吧,好。但其实这个动态代理啊,除了我们JDK给我们提供的这种啊,因为K是handle了这个接口之外,我们还有一种比较常用的这个啊,动态代理机制啊,是cg lab,这个CD lab,咱们在上这个下一个阶段的时候啊,老师会给你大家这个啊接触到OK吧,好,我们现在啊就以这个invocation handler为主,OK吧,好按照我们这个代理类的写法啊。
06:08
来一个。他给的这个,他给的表示什么,是不是目标对象。嗯,TRG,说白了他就是谁呢?他是不是就是张散啊?没错吧,张三,咱们业务层真正的实现类的对象没问题吧?好,再来一个。Public。Transaction invocation handler啊,里边咱们object target。Target等于。Target OK吧啊,这是咱们这个代理啊,代理类的这个标准的这个写法啊,你不是不论是传统的这个啊静态代理模式,还是现在写的这个动态代理,是不是都得写这个成员变量和构造方法,对吧?好,接下来咱们这个in啊in我们先来一个,这个叫circle。
07:10
Session,咱们以前创建的肯定是一个啊,声明的肯定是一个connection,是这样吗?这回咱们是不是了,来回一回,以前写的是不是这个呀。对吧,好。行,咱们再来一个提供一个返回值啊把。Jack OB。我们现在来搭建一个check catch啊check把这个返回值反一下。Try catch。Finally好,咱们来circle session u来个my clothes,咱们把这个session啊给它传递进来行吗?啊最最后肯定是关闭啊好,这个session咱们来这个啊,用工具啊取得一下CIRC u,咱们来一个get。
08:13
Session OK吧,哎,那这个get session同学注意一点,我是不是用类去直接调呢,包括下边这个,我说用类去直接调呢。为什么?啊,因为这个get session和这个close都是不是都是static方法,那现在啊,我来问大家。我创建一个对象去掉行不行?看右。有同学说的特别明确,可以是可以,但是不建议。行啊,这个面试中这这种答案啊,是挺讨巧的啊,就比如说咱们来个优啊。又出来一个circle session u啊,是这么玩是吧,就是咱们这个session等于什么呢?U创建出来一个对象叫一个。
09:06
嗯。you.get。哎,我看看啊。UTIL。这不session吗?我看看啊。Circle session u好,大家注意看啊,是不是咱们可以调一个这个get session呢?哎,这是咱们这个idea工具啊,提示咱们啊,没有必要用对象去调,但其实它是能调的,Get这个session看到没啊,你敲几个字母它就有了,OK吧,其实它是它是能调的啊,OK吧,但是啊,就像有同学同学说的一样啊,用对象形式行,但是没有必要是这样吗?啊,为什么呢?因为是一个static方法,你溜出来一个对象就相当于在堆里边创建一块垃圾,是这样吗?它不叫耗内存。但是啊,比如说你写完这个工具类之后啊,那你同事就说了啊。哎,我就乐意这么吊。
10:02
管得着吗你,哎,我就乐意创建对象。啊,你心里边合计这不这有病吧,那你创建去吧,到时候这件事儿啊,领导追查下来啊,人家一个代码走查,垃圾代码出现了。赖你还是赖他?大家心里边肯定在想得推卸责任是不是啊,大家注意啊,就这件事啊,你写的这个U啊,啊,咱们得加点东西啊,也就是说明明我们这里边所有的方法都可以使用类直接去掉对不对,我没有必要扭出来一个对象,所以说我们需要把这个构造方法执行一个什么操作。私有化对吧?构造方法私有化吗?这个很熟悉吧,来private CIRC YouTube,哎,你看把这个构造方法给它来个private之后,是不是只有我当前这个类能出来。
11:04
这个对象我其他的类是不是我再拗,咱们看看还能拗吗?是不是拗不了了,所以说啊,他想要使用我的方法,只有唯一的一种途径是什么使用什么。哎,使用类去直接调方法啊,OK吧,好,这是一个啊三拿到了之后,同学们注意,我们现在来一个method,请告诉我method是什么。我还不知道这是方法吗?他是张三的方法还是李四的方法,张三的方法是这样吧,他是真真正正的我们业务层实现类的业务方法是这样吗?哎,Method,调一个点in work来target。啊,OK吧,好,我们来一个返回值OBJ,最终这个返回值是不是返回到我们代理类方法的这个上一层,是这样吗?诶,那如果我这个业务它没有返回值怎么办呢。
12:12
那我这块OJ已经写死了,我没有返回值怎么办呢?如果你在执行业务逻辑的时候没有返回值,那这个obj返回的就是一个什么呀。Nu nu值OK吧,那咱们接受一个nu值就相当于没有返回值就行了,那它最终return的一个结果就是一个nu值,能理解吧?好,行了,业务逻辑处理完毕之后啊,咱们要干嘛呢?是不是提交事务啊。对吧。啊,上面做个标识吧,其实以前你们这个学过这个代码,没有必要再注释了啊,啊这块还不是很熟是吧?啊这是什么处理业务。逻辑下面是什么呢?处理业务逻辑完毕后,我们要干嘛?提交事物?怎么提交同学们session.commit如果在处理业务逻辑的同时出现了问题,咱们是不是应该33行直接往哪跳啊?开块跳,我需要让上面所有的执行完的操作作废掉筛点啊。
13:26
Robot是这样吧,行,咱们这个啊in啊就写完了这个in work请注意啊,这个是谁的方法。哎,这个是不是相当于代理类的业务方法。业务。方法OK吧,你们上回举的那例子是什么呢?张三和李三要干嘛?追女孩啊,还要干嘛?表白了是吧,啊行啊,这个叫什么呢?这一步master点叫什么呢。哎,叫做谁?张三的表白。
14:02
表白方法是这样吗?好,那上边这个引爆盒是谁呢?哎,李四的这个啊,表白方法啊,OK了。好,嗯,然后呢,咱们是不是得来一个方法来取得我们带你这个对象。对吧,好。
我来说两句