first commit
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
/.idea/
|
||||||
# ---> Java
|
# ---> Java
|
||||||
# Compiled class file
|
# Compiled class file
|
||||||
*.class
|
*.class
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>JavaBasiceDemo</artifactId>
|
||||||
|
<groupId>com.wyl.example</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>dynamic-proxy</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cglib</groupId>
|
||||||
|
<artifactId>cglib</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.wyl.demo.proxy.cglib;
|
||||||
|
|
||||||
|
import net.sf.cglib.proxy.Enhancer;
|
||||||
|
|
||||||
|
public class CglibProxyFactory {
|
||||||
|
|
||||||
|
public static Object getProxy(Class<?> clazz) {
|
||||||
|
// 创建动态代理增强类
|
||||||
|
Enhancer enhancer = new Enhancer();
|
||||||
|
// 设置类加载器
|
||||||
|
enhancer.setClassLoader(clazz.getClassLoader());
|
||||||
|
// 设置被代理类
|
||||||
|
enhancer.setSuperclass(clazz);
|
||||||
|
// 设置方法拦截器
|
||||||
|
enhancer.setCallback(new DebugMethodInterceptor());
|
||||||
|
// 创建代理类
|
||||||
|
return enhancer.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.wyl.demo.proxy.cglib;
|
||||||
|
|
||||||
|
import net.sf.cglib.proxy.MethodInterceptor;
|
||||||
|
import net.sf.cglib.proxy.MethodProxy;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义MethodInterceptor
|
||||||
|
*/
|
||||||
|
public class DebugMethodInterceptor implements MethodInterceptor {
|
||||||
|
@Override
|
||||||
|
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
|
||||||
|
//调用方法之前,我们可以添加自己的操作
|
||||||
|
System.out.println("cglib before method " + method.getName());
|
||||||
|
// 调用被代理类的原有方法
|
||||||
|
Object object = methodProxy.invokeSuper(o, args);
|
||||||
|
//调用方法之后,我们同样可以添加自己的操作
|
||||||
|
System.out.println("cglib after method " + method.getName());
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.wyl.demo.proxy.cglib;
|
||||||
|
|
||||||
|
import net.sf.cglib.proxy.Enhancer;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Enhancer enhancer = new Enhancer();
|
||||||
|
// 设置类加载器
|
||||||
|
enhancer.setClassLoader(MessageService.class.getClassLoader());
|
||||||
|
// 设置被代理类
|
||||||
|
enhancer.setSuperclass(MessageService.class);
|
||||||
|
// 设置方法拦截器
|
||||||
|
enhancer.setCallback(new DebugMethodInterceptor());
|
||||||
|
MessageService messageService = (MessageService) enhancer.create();
|
||||||
|
messageService.send("wyl");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.wyl.demo.proxy.cglib;
|
||||||
|
|
||||||
|
public class MessageService {
|
||||||
|
public String send(String message) {
|
||||||
|
System.out.println("send message:" + message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.wyl.demo.proxy.java;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationHandler;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class DebugInvocationHandler implements InvocationHandler {
|
||||||
|
/**
|
||||||
|
* 代理类中的真实对象
|
||||||
|
*/
|
||||||
|
private final Object target;
|
||||||
|
|
||||||
|
public DebugInvocationHandler(Object target) {
|
||||||
|
this.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
|
||||||
|
//调用方法之前,我们可以添加自己的操作
|
||||||
|
System.out.println("java before method " + method.getName());
|
||||||
|
// 调用被代理类的原有方法
|
||||||
|
Object result = method.invoke(target, args);
|
||||||
|
//调用方法之后,我们同样可以添加自己的操作
|
||||||
|
System.out.println("java after method " + method.getName());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.wyl.demo.proxy.java;
|
||||||
|
|
||||||
|
import java.lang.reflect.Proxy;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
MessageServiceImpl messageServiceImpl = new MessageServiceImpl();
|
||||||
|
MessageService messageServiceProxy = (MessageService) Proxy.newProxyInstance(messageServiceImpl.getClass()
|
||||||
|
.getClassLoader(), // 目标类的类加载
|
||||||
|
messageServiceImpl.getClass()
|
||||||
|
.getInterfaces(), // 代理需要实现的接口,可指定多个
|
||||||
|
new DebugInvocationHandler(messageServiceImpl));
|
||||||
|
messageServiceProxy.send("java");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.wyl.demo.proxy.java;
|
||||||
|
|
||||||
|
public interface MessageService {
|
||||||
|
String send(String message);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.wyl.demo.proxy.java;
|
||||||
|
|
||||||
|
public class MessageServiceImpl implements MessageService {
|
||||||
|
public String send(String message) {
|
||||||
|
System.out.println("send message:" + message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.wyl.example</groupId>
|
||||||
|
<artifactId>JavaBasiceDemo</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<modules>
|
||||||
|
<module>dynamic-proxy</module>
|
||||||
|
</modules>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cglib</groupId>
|
||||||
|
<artifactId>cglib</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
</project>
|
||||||
Reference in New Issue
Block a user