1.静态代理
- 真实类
public interface IUserService {
void sayHelo();
}
public class UserServiceImpl implements IUserService {
@Override
public void sayHelo() {
System.out.println("hello");
}
}
-
代理类
public class StaticProxy implements IUserService { @Override public void sayHelo() { new UserServiceImpl().sayHelo(); System.out.println("此处增强-------"); } }
-
测试
@Test public void testStaticProxy(){ IUserService service =new StaticProxy(); service.sayHelo(); }
2.动态代理
1.jdk动态代理(基于同一接口)
-
真实类(接口+实现类)
public interface IUserService { void sayHelo(); } public class UserServiceImpl implements IUserService { @Override public void sayHelo() { System.out.println("hello"); } }
-
代理类
public class MyHandler implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(new UserServiceImpl(),args); System.out.println("此处增强-------"); return null; } }
-
测试
@Test public void testDynimalProxy(){ IUserService userService = (IUserService) Proxy.newProxyInstance(IUserService.class.getClassLoader(),UserServiceImpl.class.getInterfaces(), new MyHandler());//得到代理类 userService.sayHelo(); }
2.cglib动态代理(对于没有接口)
-
准备(导入依赖)
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency>
-
真实类
public class StudentService { public void study(){ System.out.println("学习----"); } }
-
代理类
public class CglibProxy implements MethodInterceptor { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { method.invoke(new StudentService(),objects); System.out.println("此处增强----"); return null; } }
-
测试
@Test
public void testCglibProxy() {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(StudentService.class);//设置父类
enhancer.setCallback(new CglibProxy());//设置回调
StudentService service = (StudentService)enhancer.create();//得到代理类
service.study();
}