1,如果需要使用jdk动态代理就需要接口
UserService
public interface UserService {
/*
*
* */
void insertUser();
void deleteUser();
void updateUser();
void selectUser();
}
UserServiceImpl
public class UserServiceImpl implements UserService {
@Override
public void insertUser() {
System.out.println("增加用户");
}
@Override
public void deleteUser() {
System.out.println("删除用户");
}
@Override
public void updateUser() {
System.out.println("修改用户");
}
@Override
public void selectUser() {
System.out.println("查询用户");
}
}
测试
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
//被代理类对象
UserServiceImpl userService = new UserServiceImpl();
UserService o = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), new Class[]{UserService.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String name = method.getName();
if(name.equals("insertUser")||name.equals("deleteUser")||name.equals("updateUser")){
System.out.println("该方法被增强了");
}
return method.invoke(userService,args);
}
});
o.updateUser();
o.selectUser();
}
}
2,CgLib动态代理
引入依赖
<!--spring核心容器-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--springAop相关的左边-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!--spring整合单元测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
测试
import com.zhang.service.impl.UserServiceImpl;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class CglibProxy {
public static void main(String[] args) {
//被代理对象
UserServiceImpl userService = new UserServiceImpl();
//创建一个Enhancer对象
Enhancer enhancer = new Enhancer();
//设置要代理的类(父类)
enhancer.setSuperclass(UserServiceImpl.class);
//设置回调,在回调里面编写代理规则
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
String name = method.getName();
if(name.equals("insertUser")||name.equals("deleteUser")||name.equals("updateUser")){
System.out.println("该方法被增强了");
}
return method.invoke(userService,objects);
}
});
//创建代理对象
UserServiceImpl o = (UserServiceImpl) enhancer.create();
o.deleteUser();
o.selectUser();
}
}