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