配置类
@Configuration
@ComponentScan("test10month.test1013")
public class SpringClass {
}
接口和实现类
public interface Addinterface {
void add(int i, int j);
void update();
}
@Component("realizationAddinterface")
public class RealizationAddinterface implements Addinterface {
@Override
public void add(int i, int j) {
System.out.println("实现类的add" + i + j);
}
@Override
public void update() {
System.out.println("实现类的update");
}
}
实现InvocationHandle接口
@Component("invocationHandleRealiztion")
public class InvocationHandleRealiztion implements InvocationHandler {
@Autowired
@Qualifier("realizationAddinterface")
private Addinterface addinterface;
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("在调用方法前添加的某些功能");
var invoke = method.invoke(addinterface, args);
System.out.println("在功能实现完以后又添加的某些功能");
return invoke;
}
}
测试类
public class ProxyAopMain {
public static void main(String[] args) {
ApplicationContext ApplicationContext = new AnnotationConfigApplicationContext(SpringClass.class);
InvocationHandleRealiztion invocationHandleRealiztion = ApplicationContext.getBean("invocationHandleRealiztion", InvocationHandleRealiztion.class);
Object newProxyInstance = Proxy.newProxyInstance(RealizationAddinterface.class.getClassLoader(), RealizationAddinterface.class.getInterfaces(), invocationHandleRealiztion);
Addinterface addinterface = (Addinterface) newProxyInstance;
addinterface.add(1, 2);
System.out.println("*****************");
addinterface.update();
/**
* 在调用方法前添加的某些功能
* 实现类的add12
* 在功能实现完以后又添加的某些功能
* *****************
* 在调用方法前添加的某些功能
* 实现类的update
* 在功能实现完以后又添加的某些功能
*/
}
}