(1)创建OrderService接口并定义generate和modify方法 (2)创建OrderService接口的实现类OrderserviceImpl并实现其generate和modify方法 (3)创建测试类,在测试类中实现CGLib动态代理的代码实现以及JDK动态代理的代码实现 (4)要求在原始方法运行后先输出一条语句,内容为“事务功能”
时间: 2024-03-25 16:39:09 浏览: 156
JDK和CGlib分别实现的动态代理源代码
1. 创建OrderService接口并定义generate和modify方法:
```java
public interface OrderService {
void generate();
void modify();
}
```
2. 创建OrderService接口的实现类OrderserviceImpl并实现其generate和modify方法:
```java
public class OrderServiceImpl implements OrderService {
@Override
public void generate() {
System.out.println("生成订单");
}
@Override
public void modify() {
System.out.println("修改订单");
}
}
```
3. 创建测试类,在测试类中实现CGLib动态代理的代码实现以及JDK动态代理的代码实现:
```java
public class ProxyTest {
public static void main(String[] args) {
// JDK动态代理
System.out.println("JDK动态代理:");
OrderService orderServiceJdk = (OrderService) Proxy.newProxyInstance(
OrderService.class.getClassLoader(),
new Class[]{OrderService.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("事务功能");
Object result = method.invoke(new OrderServiceImpl(), args);
return result;
}
});
orderServiceJdk.generate();
orderServiceJdk.modify();
// CGLib动态代理
System.out.println("CGLib动态代理:");
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(OrderServiceImpl.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("事务功能");
Object result = methodProxy.invokeSuper(o, objects);
return result;
}
});
OrderServiceImpl orderServiceCglib = (OrderServiceImpl) enhancer.create();
orderServiceCglib.generate();
orderServiceCglib.modify();
}
}
```
输出结果为:
JDK动态代理:
事务功能
生成订单
事务功能
修改订单
CGLib动态代理:
事务功能
生成订单
事务功能
修改订单
4. 在原始方法运行后先输出一条语句,内容为“事务功能”,这一点在上面的代码中已经实现了。
阅读全文