diff --git a/src/main/java/cn/noexception/container/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.java b/src/main/java/cn/noexception/container/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.java index 0254a6d5da495f3644467d0a349372429afcb3bb..cb8a96616a0765eeb74696e548a25ec7a25f988b 100644 --- a/src/main/java/cn/noexception/container/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.java +++ b/src/main/java/cn/noexception/container/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.java @@ -38,26 +38,18 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - return bean; - } + if (isInfrastructureClass(bean.getClass())) return bean; - @Override - public Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException { - if (isInfrastructureClass(beanClass)) return null; Collection advisors = beanFactory.getBeansOfType(AspectJExpressionPointcutAdvisor.class).values(); for (AspectJExpressionPointcutAdvisor advisor : advisors) { ClassFilter classFilter = advisor.getPointcut().getClassFilter(); - if (!classFilter.matches(beanClass)) - continue; + // 过滤匹配类 + if (!classFilter.matches(bean.getClass())) continue; AdvisedSupport advisedSupport = new AdvisedSupport(); - TargetSource targetSource = null; - try { - targetSource = new TargetSource(beanClass.getDeclaredConstructor().newInstance()); - } catch (Exception e) { - e.printStackTrace(); - } + + TargetSource targetSource = new TargetSource(bean); // 设置目标对象 advisedSupport.setTargetSource(targetSource); // 设置拦截方法 @@ -67,12 +59,23 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos // 设置选择使用的代理方法 advisedSupport.setProxyTargetClass(false); + // 返回代理对象 return new ProxyFactory(advisedSupport).getProxy(); } + return bean; + } + + @Override + public Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException { return null; } + @Override + public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException { + return true; + } + /** * 检测/感知 bean 是否是切点

按需拦截 */ diff --git a/src/main/java/cn/noexception/container/factory/annotation/AutowiredAnnotationBeanPostProcessor.java b/src/main/java/cn/noexception/container/factory/annotation/AutowiredAnnotationBeanPostProcessor.java index 66e8353e2214c46eea1b81d0302d41e3935eb07e..0cddf02375420332949ab17c2cffd611399b35ab 100644 --- a/src/main/java/cn/noexception/container/factory/annotation/AutowiredAnnotationBeanPostProcessor.java +++ b/src/main/java/cn/noexception/container/factory/annotation/AutowiredAnnotationBeanPostProcessor.java @@ -37,6 +37,11 @@ public class AutowiredAnnotationBeanPostProcessor implements InstantiationAwareB return null; } + @Override + public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException { + return true; + } + @Override public PropertyValues postProcessPropertyValues(PropertyValues pvs, Object bean, String beanName) throws BeansException { // 1. 处理注解 @InputValue diff --git a/src/main/java/cn/noexception/container/factory/config/InstantiationAwareBeanPostProcessor.java b/src/main/java/cn/noexception/container/factory/config/InstantiationAwareBeanPostProcessor.java index f5fb7e66692f50a74a479c6008d0bd51238913de..c2e5b2d62fa85e7fe658f5d73a9a2c2d424d7212 100644 --- a/src/main/java/cn/noexception/container/factory/config/InstantiationAwareBeanPostProcessor.java +++ b/src/main/java/cn/noexception/container/factory/config/InstantiationAwareBeanPostProcessor.java @@ -15,6 +15,15 @@ public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { */ Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException; + /** + * 在 Bean 对象执行初始化方法之后,执行此方法 + * @param bean + * @param beanName + * @return + * @throws BeansException + */ + boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException; + /** * 在 Bean 对象实例化完成后,设置属性操作之前执行此方法 * @param pvs diff --git a/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java b/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java index 76862a221d9fdbac1e9679943a1054430c15b0ea..ce1b7779db17be1afeb1fcf73c4d68c805f1c600 100644 --- a/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java +++ b/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java @@ -200,6 +200,7 @@ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFa return result; } + // 完成 AOP 代理对象的创建操作 @Override public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException { Object result = existingBean;