first commit

This commit is contained in:
wyl
2021-12-28 00:12:34 +08:00
parent 7bdb9840ed
commit 10ef2380e1
11 changed files with 178 additions and 0 deletions
+1
View File
@@ -1,3 +1,4 @@
/.idea/
# ---> Java # ---> Java
# Compiled class file # Compiled class file
*.class *.class
+27
View File
@@ -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;
}
}
+28
View File
@@ -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>