CGLIB的动态代理
1.在src/main下创建Java源文件,创建包com.aop.demo2
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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
3.创建Product类
package com.aop.demo2;
public class Product {
public void save() {System.out.println("保存商品···");}
public void upsate() {
System.out.println("修改商品···");
}
public void delete() {
System.out.println("删除商品···");
}
public void find() {
System.out.println("查询商品···");
}
}
4.创建SpringDemo2测试类
package com.aop.demo2;
import org.junit.jupiter.api.Test;
public class SpringDemo2 {
@Test
public void demo1(){
Product product = new Product();
Product proxy = (Product) new MyCglibProxy(product).createProxy();
proxy.save();
proxy.upsate();
proxy.delete();
proxy.find();
}
}
5.创建MyCglibProxy类实现CGLIB动态代理
package com.aop.demo2;
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 MyCglibProxy implements MethodInterceptor {
private Product product;
public MyCglibProxy(Product product) {
this.product = product;
}
public Object createProxy(){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(product.getClass());
enhancer.setCallback(this);
Object proxy=enhancer.create();
return proxy;
}
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
if ("save".equals(method.getName())){
System.out.println("权限校验");
return methodProxy.invokeSuper(proxy,args);
}
return methodProxy.invokeSuper(proxy,args);
}
}
6.输出结果