前言
提到对类进行增强,一定会想到动态代理。本文使用两种方法实现对类进行增强。
实现
实现一:后置处理器实现
通过springboot提供的后置处理,生成对应的曾强类进行增强。实现BeanPostProcessor
接口,在postProcessAfterInitialization
生成代理类,对执行方法进行增强。
import com.spring.demo.processor.JdkDynamicAopProxy;
import lombok.extern.slf4j.Slf4j;
import org.aopalliance.intercept.MethodInterceptor;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import java.lang.reflect.Proxy;
/**
* Bean组件的 PostProcessor;
*/
@Component
@Slf4j
public class MyBeanPostProcessor implements BeanPostProcessor, BeanClassLoaderAware {
private ClassLoader classLoader;
public MyBeanPostProcessor() {
System.out.println("MyBeanPostProcessor...");
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//前置条件判断 这里模拟只对某些包下的类进行曾强
String className = bean.getClass().getName();
boolean jdkDynamicProxy = AopUtils.isJdkDynamicProxy(bean);
boolean cglibProxy = AopU