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

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

上级 9ace56e9
......@@ -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<AspectJExpressionPointcutAdvisor> 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 是否是切点 <p>按需拦截
*/
......
......@@ -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
......
......@@ -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
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册