提交 4646d4ff 编写于 作者: 感冒灵

<feat>: 给代理对象设置属性注入。

上级 9ace56e9
...@@ -38,26 +38,18 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos ...@@ -38,26 +38,18 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos
@Override @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 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<AspectJExpressionPointcutAdvisor> advisors = beanFactory.getBeansOfType(AspectJExpressionPointcutAdvisor.class).values(); Collection<AspectJExpressionPointcutAdvisor> advisors = beanFactory.getBeansOfType(AspectJExpressionPointcutAdvisor.class).values();
for (AspectJExpressionPointcutAdvisor advisor : advisors) { for (AspectJExpressionPointcutAdvisor advisor : advisors) {
ClassFilter classFilter = advisor.getPointcut().getClassFilter(); ClassFilter classFilter = advisor.getPointcut().getClassFilter();
if (!classFilter.matches(beanClass)) // 过滤匹配类
continue; if (!classFilter.matches(bean.getClass())) continue;
AdvisedSupport advisedSupport = new AdvisedSupport(); AdvisedSupport advisedSupport = new AdvisedSupport();
TargetSource targetSource = null;
try { TargetSource targetSource = new TargetSource(bean);
targetSource = new TargetSource(beanClass.getDeclaredConstructor().newInstance());
} catch (Exception e) {
e.printStackTrace();
}
// 设置目标对象 // 设置目标对象
advisedSupport.setTargetSource(targetSource); advisedSupport.setTargetSource(targetSource);
// 设置拦截方法 // 设置拦截方法
...@@ -67,12 +59,23 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos ...@@ -67,12 +59,23 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos
// 设置选择使用的代理方法 // 设置选择使用的代理方法
advisedSupport.setProxyTargetClass(false); advisedSupport.setProxyTargetClass(false);
// 返回代理对象
return new ProxyFactory(advisedSupport).getProxy(); return new ProxyFactory(advisedSupport).getProxy();
} }
return bean;
}
@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
return null; return null;
} }
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
/** /**
* 检测/感知 bean 是否是切点 <p>按需拦截 * 检测/感知 bean 是否是切点 <p>按需拦截
*/ */
......
...@@ -37,6 +37,11 @@ public class AutowiredAnnotationBeanPostProcessor implements InstantiationAwareB ...@@ -37,6 +37,11 @@ public class AutowiredAnnotationBeanPostProcessor implements InstantiationAwareB
return null; return null;
} }
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
@Override @Override
public PropertyValues postProcessPropertyValues(PropertyValues pvs, Object bean, String beanName) throws BeansException { public PropertyValues postProcessPropertyValues(PropertyValues pvs, Object bean, String beanName) throws BeansException {
// 1. 处理注解 @InputValue // 1. 处理注解 @InputValue
......
...@@ -15,6 +15,15 @@ public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { ...@@ -15,6 +15,15 @@ public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
*/ */
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException; 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 对象实例化完成后,设置属性操作之前执行此方法 * 在 Bean 对象实例化完成后,设置属性操作之前执行此方法
* @param pvs * @param pvs
......
...@@ -200,6 +200,7 @@ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFa ...@@ -200,6 +200,7 @@ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFa
return result; return result;
} }
// 完成 AOP 代理对象的创建操作
@Override @Override
public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException { public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException {
Object result = existingBean; Object result = existingBean;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册