jdk
public interface IUserDAO {
//对用户的操作
public String add();
}
public class UserDAOImpl implements IUserDAO {
public String add() {
System.out.println("弱水三千只取一瓢饮,沧海万倾唯系一江潮");
return "你还要我怎么样?";
}
}
public class jdkTest {
@Test
public void testjdk() {
//实现jdk动态代理
//1。父类变量指向一个子类对象
final IUserDAO dao = new UserDAOImpl();
InvocationHandler ih = new InvocationHandler() {
/*
* proxy:代理对象 不可用 如果用会循环调度, 错误StackOverFlow
* method:目标对象的额方法
* args:目标对象方法的参数
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before===============");
Object result = method.invoke(dao, args);
System.out.println("after================");
return result;
}
};
//2。 使用xxx产生代理对象
IUserDAO proxy = (IUserDAO) Proxy.newProxyInstance(dao.getClass().getClassLoader(), dao.getClass().getInterfaces(), ih);
String str=proxy.add();
System.out.println(str);
}
}
cglib
public class UserDaoImpl { public void add(){ System.out.println(" 弱水三千只取一瓢饮,沧海万倾唯系一江潮"); } }
public class cglibTest { @Test public void testcglib() { Enhancer enhancer = new Enhancer(); final UserDaoImpl userDao = new UserDaoImpl(); //1. enhancer.setSuperclass(userDao.getClass()); //2. enhancer.setCallback(new MethodInterceptor() { public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("before==============="); methodProxy.invoke(userDao, objects); System.out.println("after================"); return null; } }); //3. UserDaoImpl proxy=(UserDaoImpl)enhancer.create(); proxy.add(); } }