前言
我们在很多时候,并不能直接使用spring aop功能,需要自己实现代理对java代码进行aop操作。这里使用手动代理的方式对AOP进行处理。
实践
一、定义一个注解用于需要特殊处理的方法
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface StepAnnotation {
String name();
}
二、定义一个BeanPostProcessor 用于对需要特殊处理方法用代理代替原有类
@Configuration
public class StepBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object o, String beanName) throws BeansException {
try {
Method[] methods = o.getClass().getMethods();
for (Method method : methods) {
StepAnnotation annotation = method.getAnnotation(StepAnnotation.class)