JKD的动态代理
- 新建项目

- 项目结构

1.在src/main下创建Java源文件,创建包com.aop.demo1
2.在pom.xml内引入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
3.创建UserDao接口
package com.aop.demo1;
public interface UserDao {
public void save();
public void upsate();
public void delete();
public void find();
}
4.创建UserDaoImpl接口
package com.aop.demo1;
public class UserDaoImpl implements UserDao{
public void save() {
System.out.println("保存用户···");
}
public void upsate() {
System.out.println("修改用户···");
}
public void delete() {
System.out.println("删除用户···");
}
public void find() {
System.out.println("查询用户···");
}
}
5.创建SpringDemo1测试类
package com.aop.demo1;
import org.junit.jupiter.api.Test;
public class SpringDemo1 {
@Test
public void demo1(){
UserDao userDao = new UserDaoImpl();
UserDao proxy = (UserDao) new MyJdkProxy(userDao).createProxy();
proxy.save();
proxy.upsate();
proxy.delete();
proxy.find();
}
}
6.创建MyJdkProxy类实现JKD动态代理
package com.aop.demo1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyJdkProxy implements InvocationHandler {
private UserDao userDao;
public MyJdkProxy(UserDao userDao) {
this.userDao = userDao;
}
public Object createProxy(){
Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(),this);
return proxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ("save".equals(method.getName())){
System.out.println("权限校验");
return method.invoke(userDao,args);
}
return method.invoke(userDao,args);
}
}
7.输出结果
