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.輸出結果