Skip to content

Commit

Permalink
taste jdk dynamic proxy and cglib proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
Liuxey committed Oct 27, 2015
1 parent 7ad6ada commit edca053
Show file tree
Hide file tree
Showing 10 changed files with 168 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@
<argLine>-Dfile.encoding=UTF-8</argLine>
</properties>

<dependencies>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/proxy/cglib/LogProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package proxy.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
* Created by Liuxey on 2015/10/27.
*/
public class LogProxy implements MethodInterceptor{

private Object target;

public LogProxy(Object target) {
this.target = target;
}

@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
Object result = null;
System.out.println("++++++++++++++++++++++++++Invoke start: " + method.getName());
result = method.invoke(target, objects);
System.out.println("++++++++++++++++++++++++++END");
return result;
}
}
17 changes: 17 additions & 0 deletions src/main/java/proxy/cglib/ProxyFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package proxy.cglib;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;

/**
* Created by Liuxey on 2015/10/27.
*/
public class ProxyFactory {

public static <T> T newProxy(T t, MethodInterceptor proxy) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(t.getClass());
enhancer.setCallback(proxy);
return (T) enhancer.create();
}
}
17 changes: 17 additions & 0 deletions src/main/java/proxy/cglib/TestProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package proxy.cglib;

import net.sf.cglib.proxy.MethodInterceptor;

/**
* Created by Liuxey on 2015/10/27.
*/
public class TestProxy {

public static void main(String[] args) {
UserService userService = new UserService();
MethodInterceptor handler = new LogProxy(userService);
UserService proxy = ProxyFactory.newProxy(userService, handler);
proxy.add("jack");
proxy.delete("jack");
}
}
15 changes: 15 additions & 0 deletions src/main/java/proxy/cglib/UserService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package proxy.cglib;

/**
* Created by Liuxey on 2015/10/27.
*/
public class UserService {

public void add(String username) {
System.out.println("User:" + username + " added.");
}

public void delete(String username) {
System.out.println("User:" + username + " deleted.");
}
}
25 changes: 25 additions & 0 deletions src/main/java/proxy/dynamic/LogProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
* Created by Liuxey on 2015/10/27.
*/
public class LogProxy implements InvocationHandler {

private Object target;

public LogProxy(Object target) {
this.target = target;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
System.out.println("++++++++++++++++++++++++++Invoke start: " + method.getName());
result = method.invoke(target, args);
System.out.println("++++++++++++++++++++++++++END");
return result;
}
}
14 changes: 14 additions & 0 deletions src/main/java/proxy/dynamic/ProxyFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
* Created by Liuxey on 2015/10/27.
*/
public class ProxyFactory {

public static <T> T newProxy(T t, InvocationHandler proxy) {
return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(), proxy);
}
}
17 changes: 17 additions & 0 deletions src/main/java/proxy/dynamic/TestProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package proxy.dynamic;

import java.lang.reflect.InvocationHandler;

/**
* Created by Liuxey on 2015/10/27.
*/
public class TestProxy {

public static void main(String[] args) {
UserServiceImpl target = new UserServiceImpl();
InvocationHandler proxy = new LogProxy(target);
UserService userService = ProxyFactory.newProxy(target, proxy);
userService.add("jack");
userService.delete("jack");
}
}
11 changes: 11 additions & 0 deletions src/main/java/proxy/dynamic/UserService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package proxy.dynamic;

/**
* Created by Liuxey on 2015/10/27.
*/
public interface UserService {

public void add(String username);

public void delete(String username);
}
17 changes: 17 additions & 0 deletions src/main/java/proxy/dynamic/UserServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package proxy.dynamic;

/**
* Created by Liuxey on 2015/10/27.
*/
public class UserServiceImpl implements UserService {

@Override
public void add(String username) {
System.out.println("User:" + username + " added.");
}

@Override
public void delete(String username) {
System.out.println("User:" + username + " deleted.");
}
}

0 comments on commit edca053

Please sign in to comment.