文章目录
CGLIB的动态代理1.在src/main下创建Java源文件,创建包com.aop.demo22.在pom.xml内引入依赖3.创建Product类4.创建SpringDemo2测试类5.创建MyCglibProxy类实现CGLIB动态代理6.输出结果
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.输出结果
转载请注明原文地址:https://ipadbbs.8miu.com/read-63219.html