LoginInterceptor.java ===》实现InvocationHandler接口的实现类,里面实现了在被代理对象方法的前后做了些自己特有的处理
package com.gj.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class LoginInterceptor implements InvocationHandler {
// 被代理的对象
private Object target;
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public void before(Method method) {
System.out.println(method.getName() + " start..");
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
before(method);
Object oj = method.invoke(target, args);
end(method);
return oj;
}
public void end(Method method) {
System.out.println(method.getName() + " end..");
}
}
User.java ==> 一个简单的实体对象
package com.gj.bean;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
LoginDao.java ==>要被代理对象的接口
package com.gj.dao;
import com.gj.bean.User;
public interface LoginDao {
void query(User user);
void add(User user);
}
LoginDaoImpl.java ==》接口的实现类
package com.gj.dao.impl;
import com.gj.bean.User;
import com.gj.dao.LoginDao;
public class LoginDaoImpl implements LoginDao {
public void query(User user) {
System.out.println("query sucess");
}
public void add(User user) {
System.out.println("add user sucess");
}
}
ProxyTest.java ==>测试类
package com.gj.service;
import java.lang.reflect.Proxy;
import org.junit.Test;
import com.gj.aop.LoginInterceptor;
import com.gj.bean.User;
import com.gj.dao.LoginDao;
import com.gj.dao.impl.LoginDaoImpl;
/**
* 动态代理测试类
*
*/
public class ProxyTest {
@Test
public void test() {
LoginDao loginDao = new LoginDaoImpl();
LoginInterceptor lg = new LoginInterceptor();
lg.setTarget(loginDao);
//获取代理对象
LoginDao loginDaoProxy = (LoginDao) Proxy.newProxyInstance(loginDao
.getClass().getClassLoader(), loginDao.getClass()
.getInterfaces(), lg);
loginDaoProxy.add(new User());
loginDaoProxy.query(new User());
}
}
测试结果如下图所示: