增强类(不经常使用)

来源:互联网 发布:淘宝神笔提示保存成功 编辑:程序博客网 时间:2024/04/30 11:01

Spring使用增强类定义横切逻辑,由于只支持方法级别的连接点,增强类中还包含了部分连接点的方位信息。

 

增强类既包含了横切逻辑,又包含了连接点的方位信息(方法前,后),所以增强类可以用来代表一个切面,只不过它表示的连接点是目标类中所有方法,如果需要定位到特定的方法,则需要切点进一步描述。

 

增强类型:

前置增强:BeforeAdvice,又由于Spring只支持方法级别的增强,所以前置增强中只有MethodBeforeAdvice可以用  ,在目标方法调用之前执行。

后置增强:AfterReturningAdvice,在目标方法调用之后执行。

环绕增强:MethodInterceptor,在目标方法执行前后执行 增强。

异常抛出增强:ThrowAdvice,用于在目标方法抛出异常后实施增强。

引介增强:IntroductionInterceptor,用于在目标类中添加一些新的方法与属性。

通过实现这些接口中定义的方法,在接口方法中定义横切逻辑,就可以在目标方法中实施。

 

前置增强:

如:

Public class advice implements MethodBeforeAdvice{

 

//接口方法

Public void before(Method method,Object[]args,Object obj)throws Throwable{

 

Method 为目标类方法

Args 目标类方法的入参

 obj 目标类实例

}

}

在一般使用中,顺序为:获取代理工厂,添加目标类,添加增强,获取代理类实例,调用目标类的方法。

在Springxml文件中的配置为:

默认采用JDK动态代理

<bean id="advice" class="advice"/>//配置增强

<bean id="target" classs="target"/>//配置目标类

<bean id=""class="org.springframework.aop.framework.ProxyFactoryBean"

 

P:proxyInterfaces="代理类接口(与目标类的接口相同)"

 

P:interceptorName="advice(增强类)"

 

P:target-ref="target(目标类)"/>

 

后置增强:

Public class advice implements AfterReturningAdvice{

 

//接口方法

Public void afterReturning(Object returnObj,Methodmethod,Object[] args,Object obj)throws Throwable{

 

returnObj目标实例方法返回的结果

Method 为目标类方法

Args 目标类方法的入参

 obj 目标类实例

}

}

在Spring中的配置如上。

 

环绕增强:

允许在目标类方法调用前后织入横切逻辑,综合实现了前置与后置增强。

Public class advice implements MethodInterceptor{

 

//接口方法,用于截获目标类方法的执行,并在其前后添加横切逻辑

Public void invoke(MethodInvocation invocation)throws Throwable{

 

MethodInvocation不但封装了目标方法及其方法参数组,还封装了目标方法所在的实例对象

Invocation.proceed()方法通过反射调用目标实例相应的方法

}

}

在Spring中的配置如上。

 

异常抛出增强:

引介增强:

0 0
原创粉丝点击