Skip to content

Commit a659592

Browse files
cgLib动态代理
1 parent ec14248 commit a659592

File tree

7 files changed

+417
-90
lines changed

7 files changed

+417
-90
lines changed

.idea/workspace.xml

Lines changed: 341 additions & 74 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DesignPatternsDemo.iml

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,2 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3-
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
4-
<output url="file://$MODULE_DIR$/target/classes" />
5-
<output-test url="file://$MODULE_DIR$/target/test-classes" />
6-
<content url="file://$MODULE_DIR$">
7-
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
8-
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
9-
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
10-
<excludeFolder url="file://$MODULE_DIR$/target" />
11-
</content>
12-
<orderEntry type="inheritedJdk" />
13-
<orderEntry type="sourceFolder" forTests="false" />
14-
</component>
15-
</module>
2+
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />

pom.xml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,25 @@
88
<artifactId>java</artifactId>
99
<version>1.0-SNAPSHOT</version>
1010
<dependencies>
11+
<dependency>
12+
<groupId>cglib</groupId>
13+
<artifactId>cglib</artifactId>
14+
<version>2.2.2</version>
15+
</dependency>
1116

1217
</dependencies>
1318

14-
19+
<build>
20+
<plugins>
21+
<plugin>
22+
<groupId>org.apache.maven.plugins</groupId>
23+
<artifactId>maven-compiler-plugin</artifactId>
24+
<version>2.3.2</version>
25+
<configuration>
26+
<source>1.8</source>
27+
<target>1.8</target>
28+
</configuration>
29+
</plugin>
30+
</plugins>
31+
</build>
1532
</project>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package proxy.cgLibProxy;
2+
3+
import net.sf.cglib.proxy.Enhancer;
4+
import net.sf.cglib.proxy.MethodInterceptor;
5+
import net.sf.cglib.proxy.MethodProxy;
6+
7+
import java.lang.reflect.Method;
8+
9+
public class CgLibProxyExample implements MethodInterceptor {
10+
/**
11+
* 生成cgLib代理对象
12+
* @param cls
13+
* @return
14+
*/
15+
public Object getProxy(Class cls) {
16+
Enhancer enhancer=new Enhancer();
17+
//设置增强类型
18+
enhancer.setSuperclass(cls);
19+
//定义代理逻辑对象为当前对象。要求当前对象实现MethodInterceptor接口。
20+
enhancer.setCallback(this);
21+
//生成并返回代理对象
22+
return enhancer.create();
23+
}
24+
25+
/**
26+
* 代理逻辑方法。
27+
* @param o
28+
* @param method
29+
* @param args
30+
* @param methodProxy
31+
* @return
32+
* @throws Throwable
33+
*/
34+
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
35+
System.out.println("调用真实对象前。");
36+
Object result=methodProxy.invokeSuper(o,args);
37+
System.out.println("调用真实对象后。");
38+
return result;
39+
}
40+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package proxy.cgLibProxy;
2+
3+
public class CgLibTest {
4+
public static void main(String[] args) {
5+
CgLibProxyExample cgLibProxyExample=new CgLibProxyExample();
6+
Order order=(Order) cgLibProxyExample.getProxy(Order.class);
7+
order.getOrder();
8+
}
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package proxy.cgLibProxy;
2+
3+
public class Order {
4+
public void getOrder() {
5+
System.out.println("成功获取Order");
6+
}
7+
}

src/main/java/proxy/jdkProxy/JdkProxyExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public Object getProxyObject(Object target) {
2828
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
2929
System.out.println("进入代理逻辑方法。");
3030
System.out.println("在调度真实对象之前的逻辑");
31-
Object object=method.invoke(target,args);
31+
Object object=method.invoke(target,args); //通过反射进行方法的调用
3232
System.out.println("在调度真实对象之后的逻辑");
3333
return object;
3434
}

0 commit comments

Comments
 (0)