AOP - 自己写 JDK 动态代理增强 bean
AOP 的原理就是给目标对象创建代理对象,达到增强目标对象方法的目的
如果目标对象实现了接口就是用 JDK 动态代理,如果没实现接口就是用三方的 CGLIB 代理
如果不使用 AOP 想要增强一个 bean 可以这样做:
@Component
public class Test implements BeanPostProcessor, ApplicationContextAware {
private ApplicationContext applicationContext;
// ApplicationContextAware 感知回调回传 IOC 容器
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
// bean 工厂后置处理器,拦截所有的 bean
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// 只增强 User bean
if (bean instanceof User) {
User user = (User) applicationContext.getBean("user");
return Proxy.newProxyInstance(
user.getClass().getClassLoader(),
user.getClass().getInterfaces(),
(Object proxy, Method method, Object[] args) -> {
// 如果不是 sayHello 方法不增强(只增强 sayHello 方法)
if (!method.getName().equals("sayHello")){
return method.invoke(user, args);
}
System.out.println("执行前.....");
Object invoke = method.invoke(user, args); // 执行 bean 本身的方法,这里就是 sayHello
System.out.println("执行后.....");
return invoke;
}
);
}
// 如果 bean 不是 User 直接返回原来的
return bean;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具