您的位置:首页 > 编程语言 > Java开发

some notes about spring aop

2016-12-04 01:27 288 查看
1 .

timeCountIntecetor implements handlerInterceptor {
preHandle(); postHandle(); afterComplete();
}


2 . 动态代理 by implement InvocationHandler (对接口)

class MyProxy implements InvocationHandler
{
Object obj;
public Object bind(Object obj)
{
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("I'm proxy!");
Object res = method.invoke(obj, args);
return res;
}
}

public class DynamicProxy
{
public static void main(String[] args)
{
MyProxy myproxy = new MyProxy();
HoseeDynamicimpl dynamicimpl = new HoseeDynamicimpl();
HoseeDynamic proxy = (HoseeDynamic)myproxy.bind(dynamicimpl);
System.out.println(proxy.sayhi());
}
}


  

3 . 对类:
@Aspect
ServiceTimeCountAspect:

@Pointcut("execution(* me.ele.jarch.aries.service.*.*(..))")
private void serviceMethod() {
}

//  @Around("me.ele.jarch.aries.aspect.ServiceTimeCountAspect.serviceMethod()")
//    @Around("serviceMethod() || repositoryMethod()")
@Around("serviceMethod()")
public Object logServiceMethodRunningTime(ProceedingJoinPoint pjp)
throws Throwable {
// start stopwatch
StopWatch watch = new StopWatch();
watch.start();

Object retVal = pjp.proceed();

// stop stopwatch
watch.stop();
Long time = watch.getTotalTimeMillis();
String methodName = pjp.getSignature().getName();

logger.info("service method: {} time count : {}", methodName, time);

return retVal;
}


Spring AOP 会动态选择使用 JDK 动态代理、CGLIB 来生成 AOP 代理,如果目标类实现了接口,Spring AOP 则无需 CGLIB 的支持,直接使用 JDK 提供的 Proxy 和 InvocationHandler 来生成 AOP 代理即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: