00:00
下面呢,我们就具体来看一下spring的A。呃,在spring2.0以上的版本,我们可以使用基于aspect接这个框架的a I aspect接是扎va社区里边最完整最流行的a op框架。多说一句哈,实际上呢,Su自身也有一个a op框架的实现,但是相对于这个pack j而言,这pack j更值得我们推荐和使用,因为我们讲的是spring4.0,所以说当然可以使用这个X pack的接。具体配置方式有两种,一种一种是基于XX及注解的方式,还有一个是基于X文件配置的方式。我们先讲这个基于注解的方式,注解方式都讲完了,我们再说基于配置文件的方式。下边的话我们就开始。首先需要加加包。然后呢,我们需要在配置文件里边进行一些简单的配置,OK,新建一个力。
01:09
文件夹。然后呢,导入加包,我们找到是不是4.0找到require需要考到加包。A op allspa JA。A logging是必须要的是吧?Aspects beans contact Co expression c。改进来。这个加到路下。我想加入都有哪些?一个两个三个四个对吧。下面的话呢,我们来新建一个spring的配置文件。Re。Context文件。
02:01
下一步我们需要加入lp bans,还有context,我们不是先讲基于注解的方式吗?好的,下面的话呢,我们来建一个包。这个包呢,叫A的实现。我们把这个接口和这个接口最纯洁的实现类搞起来。嗯,这里边儿的话呢,我进来做一个简单的配置。配置自动。扫描的包。对吧。看。Simple。在这个上边我来加一个注解。At a component。
03:00
密方法克制一下。步骤是什么样的?第一步?第二,创建。IC。武器第二部。从IOC容器中获取。进到值里。第三步只用。好的,Contact pass contact。放电获取并的实例,Ari calculator cx.get b。
04:00
Arith calculator their class。使用b calculator点二。3336。Result。等于。Result。第二,找一个。那OK,结果是没问题的,同学说,哎,老师你那个,嗯,日志的那个打印也没出来呀,我还没加呢,对吧。现在的话呢,我们又想实现我们前面这个日志的功能。如何实现呢?这就是我们spring。AOP框架的功能。首先看一下我们前边讲到的这个技术点。诶这块的话呢,讲AP基本概念的时候,我们说了哈,我们可以从这个业务逻辑里边进行抽取,抽取这个横切关注点,那么呃,有关联的功能相似的横切关注点可以组成一个切面。
05:12
我们现在的话呢,我们就来创建一个切面,这叫日志切面。Organ。Act。日切面,那日志切面的话,我们前面我们知道,比方说有一些这个日志是需要在方法执行之前执行,有一些这个日志呢,是需要在方法执行之后执行,对吧,我们先来写一个安word before。一句话,The method。前面我们打印那个效果呀,还有方法名和方法参数吧,这个一会儿再加好了,这个加完之后,这个加上了,那下面我们需要什么呢?哎,我们我们希望就是我在运行的时候。
06:08
我这个RESULT9在这个执行之前,这句话给我执行上是这么一个效果吧,那怎么执行啊。嗯,我就需要把这个声明为一个切面一。啊。各个类声明为一个切面,这么一个切面的话呢,需要两个步骤,首先需要。把。A。放入到IOC容器中,At,对吧。然后呢,我们还需要说,呃,声明为一个切面,再声明在。声明为一个切面,还有一个注解。
07:01
就可以了,好这样加完之后的话,我再执行。那是不是说在我方法开始之前,这句话就可执行呢?还差一点对吧。还差点什么呀,你得告诉我这个方法,我这个方法,我这个方法在哪些类的哪些方法开始之前执行啊。我再说一遍哈,我这个方法在哪些类的哪些方法开始之前执行啊,是加一个注解叫before,这是一个前置通知。证明。该方法。是一个前置。公值什么意思呢?在目标方法。开始之前。
08:02
执行,那比方你得写呀,Execution执行在什么什么方法开始之前执行什么什么方法呀。这个方法吗?哎,这个方法开始之前执行。注意看哈,嗯。Public返回值包名接口名I,那这个I和J是什么?I和J应该是。嗯,行参的名字,这个是没有意义的,拿掉。再来。哦。还差一点,还差一点什么呀?呃,配置文件里边的话呢,需要加入一个配置。这个配置的作用是。使我们在。切面里边声明的那个注解起作用,具体起什么作用呢?我们来看一下这个切面,我们在这个切面里边啊,我们声明了一个注解,这个注解叫before,就使这个注解起作用再具体一点。
09:15
当我们调用一个目标方法,而那个目标方法跟我这个注解说明这个方法相匹配的时候。那么a op框架应该自动的为那个方法所在的类生成一个代理对象。在我目标方法执行之前,先来执行这个语句。再说一遍哈,起出起的作用呢,应该是在我调用一个目标方法,如果那个目标方法跟我这个呃,Before这个注解所说明这个方法相一致的时候,A框架会自动的。为那个方法所在的类生成代理对象。
10:00
然后呢,在调用的方法之前,把这句话给它加进去。OK。十。Aspect。跌不起作用,不解起作用。AX autoy起作用就是动。未匹配的对生成代理对象再看效果。看到了吧,Method begins。好的。哎,起作用。那么我们前边的话呢,我们实际上还有要求,要求什么呀,我可能还希望是有一个方法名后还有一个参数。能加吗?当然可以加上一个参数,叫join point。
11:04
Method等于point.signat。签名点get name。I a method。They are my names。Is。方法参数。这个包好像是导错了。刚才。这个是X等于点s list。Point in edge has。加。再看效果。
12:02
看见了吗?A method a begins with3和六。那我于是的话呢,我再搞一个除法,它也会好用吗。Div。12、这好用吗?有。木有起作用,为什么呀,因为我在声明切片的时候,我只声明了它作用于爱的方法,我希望作用于我这个,呃,接口里边的所有方法怎么写,写上一个星。保存再看。OK,这个div也起作用,那么当然我们对另外两个方法也会起作用。这就是我们spring。A op的一个hello,我们来做一个小结。第一个说的up。
13:04
第一个我们说需要加入下包。加包的话呢,有这么多。我们需要为a op额外加入的。这样的机构。四个,因为如果要是我们就写一个的一个hello word IOC的话,第五个就够了二。在配置文件中。加入A的空间。哪个是?他是呗,好了。我们首先讲的是基于。注解的方式,所以说我们在在这个的这个配置文件里边,就要加入这样的一个配置。
14:02
基于注解的方式一,我们需要加入,在配文件中加入如下配。这个配置的作用是使IPA接的不解发生作用,它未匹配那个类,自动生成代理对象。二。有什么不一样,我们看我们这个直线类啊,就是一个实现类,加上一个component,我们怎么样,我们需要去声明一个切面是吧。需要去说明一个切面。过来来把。关注点。横切横。关注。点的代码。抽象到切面切面的类中好了,这个切面的类呢,首先需要加入到IOC容器中是吧?
15:10
切面。首先是一个。IOC中的BD加入,Component加入。解,然后别忘了,这是一个切面。切面还需要加入,加入什么呀,那个注解叫。加入这个注解。加入这个组解好。然后我在这个类里边去声明各种通知。在。在这中声明各种通知,具体有哪些通知呢?
16:05
PD。实际上F街里边有五种通知,Before,前置通知。After后置通知,After returning返回通知,After throwing异常通知,Around环绕通知,嗯,后几个通知的话呢,我们逐一来说前置通知方法执行之前的时候执行。嗯。那加入各种通知,这个通知实际上就是方法是吧,通知实际上就是就是方法。具体说,一,声明一个方法,声明一个方法。第二,在方法前。加入at。Before,不解。我们说的是一个什么呀,这一个前置通知好了,这一块又有点讲究,什么讲究。
17:02
来看括号,我们说明他的时候,我们是不是还写了那么一串东西啊?解释一下,解释一下他什么意思。执行。执行后边是一个呃阶的一个表达式。说一下。我叫三。哎,我们现在的话呢,我们来这里边的话呢,有一些例子,我们我们说我们可以加入一些占位符,我要是这样写的话,这个星。就可以表示任意修饰符跟任意返回值,就是说这个还可以进行进一步的抽象,把这拿掉,瞧着这个星可以代表任意修饰符,任意返回值,它是什么呀?包吧,表示这个包里边的对吧,这也可以进行省略这个包里边的所有类。这样就可以。又是积表达式。
18:02
我们这块的话呢,有一些例子,大家可以来参看这个例子就可以了,比方说第一个星后边的这个每一个星都代表什么意思,我们这块的话呢,不再一个一个说了,好吧,因为我们后边我们还要再写,写的时候的话呢,我们逐一通过例子的方式,逐一再进行,逐一再对大家进行说明。好了,到这块的话呢,这个我也就加完了。被搞定之后,我实际上运行的时候怎么样就会起作用了吧。还差个什么,还差一个就是如果你想在这个方法里边来访问到一些连接细节的话,我们可以在。通知的方法里边加上这样的一个join point作为参数,这里边我们可以访问到方法的签名跟方法的参数。对吧,没事C。过来在字。
19:02
哎,我们可以在声明的方法中加上这样的一个参数,然后的话呢,它可以帮我们访问到一些连接细节在这。完整的就是这样。啊,大家结合这个笔记,结合我们刚才这个视频呢,把这个前置通知搞一下,一会儿我们来说后置通知,返回通知,还有异常通知以及或少通知。
我来说两句