静态代理
User类
package com.hc.pojo2;
public class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
接口
package com.hc.intef;
import com.hc.pojo2.User;
/**
* 用户接口
*/
public interface UserInterface {
boolean saveUser(User user);
}
实现类
package com.hc.intef.impl;
import com.hc.intef.UserInterface;
import com.hc.pojo2.User;
public class UserInterfaceImpl implements UserInterface {
@Override
public boolean saveUser(User user) {
System.out.println("保存用户:" + user.getName());
return true;
}
}
代理类+测试
package com.hc.test;
import com.hc.intef.UserInterface;
import com.hc.intef.impl.UserInterfaceImpl;
import com.hc.pojo2.User;
public class UserTest {
public static void main(String[] args) {
testStaticProxy();
}
private static void testStaticProxy() {
User user = new User();
user.setName("tom");
new StaticProxy(new UserInterfaceImpl()).saveUser(user);
}
static class StaticProxy implements UserInterface {
private UserInterface userInterface;
public StaticProxy(UserInterface userInterface) {
this.userInterface = userInterface;
}
@Override
public boolean saveUser(User user) {
System.out.println("静态代理-开始保存用户");
boolean result = userInterface.saveUser(user);
System.out.println("静态代理-保存用户结果:" + result);
System.out.println();
return result;
}
}
}
动态代理
JDK实现
User代理类
package com.hc.proxy;
import com.hc.intef.UserInterface;
import com.hc.intef.impl.UserInterfaceImpl;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class UserProxy {
private static final InvocationHandler USER_HANDLE = (proxy, method, args) -> {
System.out.println("JDK接口动态代理-开始保存用户");
Object result = method.invoke(new UserInterfaceImpl(), args);
System.out.println("JDK接口动态代理-保存用户结果"+result);
return result;
};
public static UserInterface getUserProxy() {
UserInterface userInterface = (UserInterface) Proxy.newProxyInstance(
UserProxy.class.getClassLoader(),
new Class[]{UserInterface.class},
USER_HANDLE);
return userInterface;
}
}
测试类
package com.hc.proxy.test;
import com.hc.pojo2.User;
import com.hc.proxy.UserProxy;
public class Test {
public static void main(String[] args) {
// jdk动态代理
testJDKProxy();
}
private static void testJDKProxy() {
User user = new User();
user.setName("tom");
UserProxy.getUserProxy().saveUser(user);
}
}
CGLib实现
maven依赖
<dependencies>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
代理类
package com.hc.proxy;
import com.hc.myinterface.UserInterface;
import com.hc.myinterface.impl.UserInterfaceImpl;
/**
* 通过CGLib实现动态代理
*/
public class UserProxy2 {
// 实现InvocationHandler接口
private static final net.sf.cglib.proxy.InvocationHandler USER_HANDLER = (proxy, method, args) -> {
System.out.println("CGLib接口动态代理-开始保存");
Object result = method.invoke(new UserInterfaceImpl(), args);
System.out.println("CGLib接口动态代理-保存结果:"+result);
return result;
};
/**
* 获取用户代理
* @return
*/
public static UserInterface getUserProxy() {
UserInterface userInterface = (UserInterface) net.sf.cglib.proxy.Proxy.newProxyInstance(
UserProxy2.class.getClassLoader(),
new Class[]{UserInterface.class},
USER_HANDLER);
return userInterface;
}
}
测试类
package com.hc.test;
import com.hc.pojo.User;
import com.hc.proxy.UserProxy;
import com.hc.proxy.UserProxy2;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
// CGLib动态代理By interface
testCGLibProxy();
}
private static void testCGLibProxy() {
User user = new User();
user.setName("hc");
UserProxy2.getUserProxy().savaUser(user);
}
}