diff --git a/.gitignore b/.gitignore
index 0ba064c..5caf1b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+/.idea/
# ---> Java
# Compiled class file
*.class
diff --git a/dynamic-proxy/pom.xml b/dynamic-proxy/pom.xml
new file mode 100644
index 0000000..068e506
--- /dev/null
+++ b/dynamic-proxy/pom.xml
@@ -0,0 +1,27 @@
+
+
+
+ JavaBasiceDemo
+ com.wyl.example
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+
+ dynamic-proxy
+
+
+ 8
+ 8
+
+
+
+ cglib
+ cglib
+
+
+
+
\ No newline at end of file
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/CglibProxyFactory.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/CglibProxyFactory.java
new file mode 100644
index 0000000..8322de4
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/CglibProxyFactory.java
@@ -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();
+ }
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/DebugMethodInterceptor.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/DebugMethodInterceptor.java
new file mode 100644
index 0000000..9f4ed0e
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/DebugMethodInterceptor.java
@@ -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;
+ }
+
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/Main.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/Main.java
new file mode 100644
index 0000000..dbcf6ca
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/Main.java
@@ -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");
+ }
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/MessageService.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/MessageService.java
new file mode 100644
index 0000000..da5aa1d
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/cglib/MessageService.java
@@ -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;
+ }
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/DebugInvocationHandler.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/DebugInvocationHandler.java
new file mode 100644
index 0000000..9f11ced
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/DebugInvocationHandler.java
@@ -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;
+ }
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/Main.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/Main.java
new file mode 100644
index 0000000..d1dacf7
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/Main.java
@@ -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");
+ }
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageService.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageService.java
new file mode 100644
index 0000000..85c7649
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageService.java
@@ -0,0 +1,5 @@
+package com.wyl.demo.proxy.java;
+
+public interface MessageService {
+ String send(String message);
+}
diff --git a/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageServiceImpl.java b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageServiceImpl.java
new file mode 100644
index 0000000..a824142
--- /dev/null
+++ b/dynamic-proxy/src/main/java/com/wyl/demo/proxy/java/MessageServiceImpl.java
@@ -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;
+ }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..95484eb
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.wyl.example
+ JavaBasiceDemo
+ 1.0-SNAPSHOT
+
+ dynamic-proxy
+
+ pom
+
+ 8
+ 8
+
+
+
+
+ cglib
+ cglib
+ 3.3.0
+
+
+
+
+
\ No newline at end of file