aop,就是面向切面编程。什么是面向切面编程?我没听清楚,也没搞明白。我的理解就是,这个玩意就是一个牧师,可以给一个功能加buff,事前加,事后加,围绕这这事加,事前出问题了加。但是呢,加了buff不意味着人物的属性面板就永久变强了,临时的!临时的!同样呢,一个牧师,不仅能给一个人加buff,她可以给好几个人加。反正我是这么想的,后面怎么样再说。这么讲起来,spring真是一个很好的框架。帮忙创建对象,还给加buff.和hibernate,struts这些框架真不一样。
首先是底层的实现。第一种是jdk代理的,第二种是cglib代理的。不管是哪种代理,都是获取对象,然后加强或者削弱,把处理后的东西传递回来,这样就完成了一次增强。其实我有点搞不懂,里面具体做增强的那个方法是谁执行的?不太理解,本类里面又没有调用,他怎么增强的??????
下面是xml版本的aop实现的步骤和流程。
spring要额外引进一些jar包的首先是对aop的支持的包,然后是AspeetJ的包。这些包的引入。有这个概念就可以了。具体做项目的时候,版本啊,jar包啊,基本是同一的。然后是最激动人心的引入约束的时刻了。同样是对application进行操作,不过这次的约束换一下,我去截个图
这样来讲呢就比较清晰了。把具体的约束复制一份过来。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here --> </beans>
这个约束在context约束的上面一个。到这里约束就写完了。按照惯例,来一个案例。
把类配置到配置文件的方法和ioc的xml配置方法是一样的,同样是把类交给spring管理。切面类,也就是具体做增强的类也需要交给spring管理,需要在bean里面配置一下。在切面类里,写好要做什么增强(把加buff的法术准备好,预留法术位施法)的方法写好。
在配置好bean后,紧接着写aop的配置。要是可以用代码提示就好了。不过还是需要自己先记一下。我就怕记这些,但是越怕的,做了才有意义不是吗?
首先是<aop:config>这个标签。没有具体的作用,起一个标识的作用。然后是<aop:pointcut>,他有个属性叫expression,表达式。这个表达式说明哪些包的哪些类,哪些方法需要增强。这个标签还有个属性叫id,这个属性呢,就比较厉害了,他是后面用来标识的。
<aop:pointcut>有个同级的的标签,<aop:aspect>属性是ref,用来说明具体的切面类,这个切面类在上面配置了,所以下面直接写bean里面的id。<aop:aspect>有个子标签是<aop:xxx>,xxx的意思是自己配置。
到这里,我基本就把aop的第一种配置搞清楚了,果然写下来是很有用的整理方法。第二种配置还没学习,但也快了。大概明天。