定义一个MyClass类(或接口),包括math()、english()和physics()方法,可以简单模拟输出:上数学课/英语课/物理课….,上每一门课之前先要执行check()方法查看课表和preparation()方法检查上课用品,上完后需要执行pack()方法收拾书包,这些工作定义在MyAspect类中。请选择使用JDK动态代理、CGLIB代理、ProxyFactoryBean或者AspectJ中的某一种方式来实现增强处理。需要准备的相关jar包
时间: 2023-06-20 15:06:41 浏览: 143
使用JDK动态代理实现增强处理,需要准备的jar包为:jdk.jar。
MyClass类定义如下:
```java
public interface MyClass {
void math();
void english();
void physics();
}
```
MyAspect类定义如下:
```java
public class MyAspect {
public void check() {
System.out.println("查看课表");
}
public void preparation() {
System.out.println("检查上课用品");
}
public void pack() {
System.out.println("收拾书包");
}
}
```
使用JDK动态代理实现增强处理:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyClassProxy implements InvocationHandler {
private MyClass target;
private MyAspect aspect;
public MyClassProxy(MyClass target, MyAspect aspect) {
this.target = target;
this.aspect = aspect;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
aspect.check();
aspect.preparation();
Object result = method.invoke(target, args);
aspect.pack();
return result;
}
public static void main(String[] args) {
MyAspect aspect = new MyAspect();
MyClass myClass = (MyClass) Proxy.newProxyInstance(MyClass.class.getClassLoader(), new Class[]{MyClass.class}, new MyClassProxy(new MyClassImpl(), aspect));
myClass.math();
myClass.english();
myClass.physics();
}
}
class MyClassImpl implements MyClass {
public void math() {
System.out.println("上数学课");
}
public void english() {
System.out.println("上英语课");
}
public void physics() {
System.out.println("上物理课");
}
}
```
输出结果:
```
查看课表
检查上课用品
上数学课
收拾书包
查看课表
检查上课用品
上英语课
收拾书包
查看课表
检查上课用品
上物理课
收拾书包
```
阅读全文