Spring AOP详解及通过XML配置实现的实现方法
1.Spring AOP详解
讲解一下Spring AOP 的一些常用术语
切面(Aspect):
要增加什么功能?一般一个类就代表着一个功能(每个功能就是一个切面)
常用的切面有:事务管理,日志管理,权限管理,异常处理等等
连接点(Joinpoint):
哪个类的哪个方法上增加功能?
通知(Advice):
切面类的功能加在方法的什么位置?前面?后面?产生异常时?环绕(前面和后面都有)??
切入点(Pointcut):
给连接点(Jooinpoint)命名,便于在多处使用,这点很重要
目标对象(Target Object):
目标对象是被代理对象,自己的功能不够强大,要通过aop加强。
AOP代理(AOP Proxy)
功能已经通过aop加强的那个对象(这个是目标对象加强后的对象)
(一般都是newProxyinstance)
织入(Weaving)
把新功能(通过aop加强的功能)和本身的功能(目标对象的基本功能)组织在一起执行。
下面讲解一下一些语法(也是aop详解部分)
1.joinpoint语法:用一些通配符来定义在哪些类和方法上增加aop功能。
语法:(注意星号后面的空格)
1).execution(public * * (..))
所有public方法
2).execution(* set*(..))
所有以set作为方法名开头的方法
3).exuection(* com.xzy.service.AccountService.* (..))
com.xzy.service.AccountService类中的所有方法
4).execution(* com.xyz.service.*.* (..))
com.xyz.service包中所有类的所有方法
5).execution(* com.xyz.service..*.* (..))
com.xyz.service包及子包下的所有类的所有方法
2.pointcut:给joinpoint取个名字。(这个比较重要)
@pointcut("execution( * com.xzy.*.* (..))")
public void myPoint(){}///必须要写一个空的函数,然后
如这样调用:@Before("myPoint()")
3.advice
@Before
@AfterReturning
@AfterThrowing
@After(finally)
@Around
4.JoinPoint jp
ProceedingJointPoint pjp
这个可以知道当前aop对那个类的那个方法进行功能加强,也很重要,
也就是可以知道aop的切入点
System.out.println(jp.getSignature());///打印切入点的标签
但是aop切面类里面的方法要包含JoinPoint jp,如这样:
public void myend(JoinPoint jp)
{
System.out.println("方法结束了......");
}
下面讲解在spring的xml配置AOP
代码如下:
<aop:config>
<aop:aspect ref="log">
<aop:pointcut
expression="execution(* net.xinqushi.dao.impl.*.*(..))" id="pt"/>
<aop:before method="before" pointcut-ref="pt"/>
<aop:after method="after" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
注意:在aop类中必须指定@Component(value="log")///说明用spring来初始化这个类
这里面的log和ref="log"必须相同
其他的代码以此类推!
Spring AOP详解及通过XML配置实现的实现方法
最新推荐文章于 2024-05-13 17:06:04 发布