spring - AOP 基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring - AOP 基础相关的知识,希望对你有一定的参考价值。


spring AOP 

spring支持四种拦截类型:目标方法调用前,目标方法调用后,目标方法调用前后,方法抛出异常。


spring Aop采用动态代理的方式生成代理类,前面分析过动态代理和静态代理以及区别,可以点击我的博客。

一些术语解释。


连接点:

程序的某个位置,就是程序也就是类里的方法,一个类可以有多个方法,多个连接点,就是在这些方法前后异常等做文章。


切点:

可能会和连接点混淆,类里有多个连接点,那么程序或者项目执行的时候如何找到对应的连接点?切点就是做这个工作的,

切点帮你定位到对应的连接点,然后执行那四种拦截,进行增强。


增强:

切点定位到具体的连接点,定位到了,我们需要对其做点什么,不能就定位到了那里就完事吧。增加就是对目标类的连接点也就是方法

执行一段逻辑。


目标对象:

被一个或者多个切面所通知的对象。


织入:

织入就是把增强类加入到目标类的里的具体连接点上,Aop有三种织入方式,编译器织入,装载器织入,动态代理织入。

切面:由增强和切点组成,横切关注点。


Spring 对AOP的支持,目前比较流行的两种方式,一是spring 本身支持AOP的方式,二是就是比较流行的框架Aspectj。


先来说说spring本身对AOP的支持。


异常通知拦截,为什么先说这个,因为这个ThrowsAdvice接口里面什么都没有,不像AfterAdvice,MethodBeforeAdvice,MethodInterceptor

这几种方式,有方法实现。


异常抛出通知:


package com.lw.rpc.test;


import java.lang.reflect.Method;


import net.sf.cglib.reflect.FastClass;

import net.sf.cglib.reflect.FastMethod;


import org.springframework.aop.ThrowsAdvice;

import org.springframework.aop.framework.ProxyFactory;


/**

 * ThrowsAdvice 异常统计拦截

 * 

 * @author

 *

 */

public class SpringAopAdvice implements ThrowsAdvice {

/**

* 对未知异常的处理.

*/

public void afterThrowing(Method method, Object[] args, Object target, NumberFormatException ex) throws Throwable {

System.out.println("出现异常的类: " + target.getClass().getName());

System.out.println("出现异常的方法: " + method.getName());


System.out.println(" 具体什么异常 : " + ex.getClass().getName());

}


public static void main(String[] args) {

SpringAopBean bean = new SpringAopBean();


ProxyFactory pf = new ProxyFactory();

pf.setTarget(bean);

pf.addAdvice(new SpringAopAdvice());


SpringAopBean proxy = (SpringAopBean) pf.getProxy();


try {

// 测试

proxy.aopMethod1("spring");

} catch (Exception e) {

e.printStackTrace();

}

}

}


目标类:

package com.lw.rpc.test;


public class SpringAopBean {


public void aopMethod() throws NullPointerException {

System.out.println("空指针异常");

}

public int aopMethod1(String numStr) throws NumberFormatException {

int num = Integer.parseInt(numStr);

return num;

}

}


其他的几种方式,实现AfterAdvice,MethodBeforeAdvice,MethodInterceptor这三个接口就可以实现。




本文出自 “10093778” 博客,请务必保留此出处http://10103778.blog.51cto.com/10093778/1916507

以上是关于spring - AOP 基础的主要内容,如果未能解决你的问题,请参考以下文章

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

[Spring框架]Spring AOP基础入门总结一.

Spring AOP基础实践

spring基础知识——aop

Spring Aop基础总结