package cn.com.xinli.service;
public interface UserDao {
public void save(String name);
public void update(String name, Integer personid);
public String getPersonName(Integer personid);
}
-----------------------------------------------
package cn.com.xinli.service.impl;
import org.apache.log4j.Logger;
import cn.com.xinli.service.UserDao;
public class UserDaoImpl implements UserDao {
Logger log=Logger.getLogger(UserDaoImpl.class);
String userName;
public UserDaoImpl() {
}
public UserDaoImpl(String userName) {
super();
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String getPersonName(Integer personid) {
System.out.println("getPersonName方法被执行");
return userName;
}
public void save(String name) {
System.out.println("save方法被执行");
}
public void update(String name, Integer personid) {
System.out.println("update方法被执行");
}
}
--------------------------------------------------------------
package cn.com.xinli.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import cn.com.xinli.service.UserDao;
import cn.com.xinli.service.impl.UserDaoImpl;
public class JDKProxyFactory implements InvocationHandler{
private Object targetObject;
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
UserDao bean=(UserDao)targetObject;
Object result=null;
System.out.println(method.getName()+"开始执行...");
result = method.invoke(targetObject, args);
System.out.println(method.getName()+"记录日志结束...");
return result;
}
public Object createProxyInstance(Object targetObject){
this.targetObject=targetObject;
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
this.targetObject.getClass().getInterfaces(), this);
}
}
-------------------------
测试:
@Test
public void test1(){
JDKProxyFactory factory=new JDKProxyFactory();
UserDaoImpl userDao=new UserDaoImpl();
UserDao proxyUserDao= (UserDao)factory.createProxyInstance(userDao);
proxyUserDao.save("张奇");
proxyUserDao.update("ca", 1);
}