Spring AOP实践 (二)

2014-11-24 11:49:51 · 作者: · 浏览: 24
ogger.logging(Level.INFO, "before excute doIt");

businessTrans.doIt();

Logger.logging(Level.INFO, "after excute doIt");
}
}
其实现在的Jdk中提供了一个API java.lang.reflect.InvocationHandler的类.。这个类可以让我们在JVM调用某个类的方法时动态的为些方法做些什么事。

[java]
/*
* 文 件 名: DynaProxyBusinessTrans.java
* 版 权: * 描 述: <描述>
* 修 改 人: cKF54238
* 修改时间: Apr 1, 2013
* 跟踪单号: <跟踪单号>
* 修改单号: <修改单号>
* 修改内容: <修改内容>
*/
package main.java.dynaproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import main.java.logger.Level;
import main.java.logger.Logger;

/**
* <一句话功能简述>
* <功能详细描述>
*
* @author cKF54238
* @version [版本号, Apr 1, 2013]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class DynaProxyBusinessTrans implements InvocationHandler
{

/**
** 要处理的对象(也就是我们要在方法的前后加上业务逻辑的对象)
*/
private Object delegate;

public Object bind(Object delegate)
{
this.delegate = delegate;
return Proxy.newProxyInstance(this.delegate.getClass().getClassLoader(),
this.delegate.getClass().getInterfaces(),
this);

}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
Object result = null;

try
{
//执行原来的方法之前记录日志
Logger.logging(Level.DEBUGE, method.getName() + " Method start .");

result = method.invoke(this.delegate, args);

//执行原来的方法之前记录日志
Logger.logging(Level.DEBUGE, method.getName() + " Method end .");

}
catch (Exception e)
{

}
return result;
}
}

/*
* 文 件 名: DynaProxyBusinessTrans.java
* 版 权: * 描 述: <描述>
* 修 改 人: cKF54238
* 修改时间: Apr 1, 2013
* 跟踪单号: <跟踪单号>
* 修改单号: <修改单号>
* 修改内容: <修改内容>
*/
package main.java.dynaproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import main.java.logger.Level;
import main.java.logger.Logger;

/**
* <一句话功能简述>
* <功能详细描述>
*
* @author cKF54238
* @version [版本号, Apr 1, 2013]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class DynaProxyBusinessTrans implements InvocationHandler
{

/**
** 要处理的对象(也就是我们要在方法的前后加上业务逻辑的对象)
*/
private Object delegate;

public Object bind(Object delegate)
{
this.delegate = delegate;
return Proxy.newProxyInstance(this.delegate.getClass().getClassLoader(),
this.delegate.getClass().getInterfaces(),
this);

}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
Object result = null;

try
{
//执行原来的方法之前记录日志
Logger.logging(Level.DEBUGE, method.getName() + " Method start .");

result = method.invoke(this.delegate, args);

//执行原来的方法之前记录日志
Logger.logging(Level.DEBUGE, method.getName() + " Method end .");

}
catch (Exception e)
{

}
return result;
}
}

[java]
/*
* 文 件 名: AOPTest.java
* 版 权:

/*
* 文 件 名: AOPTest.java
* 版 权: [java] view plaincopyprint * 描 述: <描述>
* 修 改 人: cKF54238
* 修改时间: Apr 1, 2013
* 跟踪单号: