增强类(不经常使用)
来源:互联网 发布:淘宝神笔提示保存成功 编辑:程序博客网 时间: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中的配置如上。
异常抛出增强:
引介增强:
- 增强类(不经常使用)
- 游标(经常使用)
- Linq不经常使用但必须记住的用法(一)
- 目前使用过的不经常使用的函数
- Linq不经常使用但必须记住的用法
- C 函数大全--去除了不经常使用的。
- C 函数大全--去除了不经常使用的。
- 总结HTML中不经常使用的标签
- 增强的for循环(不常用)
- php不经常用到的函数和类中的函数(一)
- MyEclipse-2015 3.0破解激活教程(MyEclipse的破解方式经常在变,不建议使用)
- visual C++ 2010 MFC 不收缩隐藏那些不经常使用的菜单项
- visual C++ 2010 MFC 不收缩隐藏那些不经常使用的菜单项
- 使用Unity做类的增强(续)
- 经常使用现有的程序框架,总会忘记一些不经常入目的细微区别 WM_QUIT WM_CLOSE WM_DESTROY
- Qt 当中经常使用的类
- android java经常使用的工具类
- sql 经常使用的语句(个人)
- 士兵杀敌(五)
- C# 软件设计模式
- angularJS 标签指令
- 【计算机图形学】中点画圆算法和Bresenham画圆算法
- C语言深度感悟(一)
- 增强类(不经常使用)
- Android收集
- OPENGL学习视频(九)
- python virtualenv报错!
- IDEA报:Lombok Requires Annotation Processing
- 你知道汇编与反汇编的区别吗?
- JSP页面缓存JS问题
- 基于@AspectJ的AOP
- 如何在Word中输入带圈数字1-10的黑底白字和白底黑字的数字字符?