first commit
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
/.idea/
|
||||
# ---> Java
|
||||
# Compiled class file
|
||||
*.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