1.有接口情况用JDK动态代理,无接口使用CGLIB接口
2具体JDK动态代理方式
- 一个接口UserDao
public interface UserDao {
public int add(int a, int b);
public int update(int id);
}
- 接口实现类
public class UserDaoImpl implements UserDao {
@Override
public int add(int a,int b) {
System.out.println("add被执行了");
return a+b;
}
@Override
public int update(int id) {
System.out.println("update被执行了");
return id +1;
}
}
- 通过Proxy.newProxyInstance()方法创建代理对象,该方法有三个参数,一个是类加载器,一个是增强的方法所在类,代理对象。
先创建代理对象
class UserDaoProxy implements InvocationHandler{
private UserDao userDao;
//将需要增强的类传入
public UserDaoProxy(UserDao userDao){
this.userDao =userDao;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行前"+method.getName()+"传递的参数"+ Arrays.toString(args));
Object obj = method.invoke(userDao,args);
System.out.println("执行后"+obj);
return obj;
}
}
具体实现方式
//增强方法所在类
Class[] interfaces = {UserDao.class};
UserDao userDao = new UserDaoImpl();
UserDao userDao1 = (UserDao) Proxy.newProxyInstance(ProxyMain.class.getClassLoader(),interfaces,new UserDaoProxy(userDao));
int res =userDao1.add(1,2);
System.out.println(res);
本文介绍了一种使用JDK动态代理实现AOP的方式。通过创建UserDao接口及其实现类UserDaoImpl,演示了如何利用Proxy.newProxyInstance()方法创建代理对象,并实现对原有方法的增强。
2402

被折叠的 条评论
为什么被折叠?



