提交 e9dd90a7 编写于 作者: 感冒灵

<fix>: 修复容器初始化失败的BUG

上级 bbce0776
......@@ -13,6 +13,8 @@ import org.aopalliance.intercept.MethodInvocation;
public class MethodBeforeAdviceInterceptor implements MethodInterceptor {
private MethodBeforeAdvice advice;
public MethodBeforeAdviceInterceptor(){}
public MethodBeforeAdviceInterceptor(MethodBeforeAdvice advice) {
this.advice = advice;
}
......
......@@ -32,12 +32,12 @@ public class DefaultAdvisorAutoProxyCreator implements InstantiationAwareBeanPos
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return null;
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return null;
return bean;
}
@Override
......
......@@ -6,10 +6,7 @@ import cn.noexception.container.BeansException;
import cn.noexception.container.PropertyValue;
import cn.noexception.container.PropertyValues;
import cn.noexception.container.factory.*;
import cn.noexception.container.factory.config.AutowireCapableBeanFactory;
import cn.noexception.container.factory.config.BeanDefinition;
import cn.noexception.container.factory.config.BeanPostProcessor;
import cn.noexception.container.factory.config.BeanReference;
import cn.noexception.container.factory.config.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
......@@ -28,6 +25,12 @@ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFa
protected Object createBean(String beanName, BeanDefinition beanDefinition, Object[] args) throws BeansException {
Object bean = null;
try {
// 判断是否返回代理Bean对象
bean = resolveBeforeInstantiation(beanName, beanDefinition);
if (null != bean) {
return bean;
}
// 实例化 Bean
bean = createBeanInstance(beanDefinition, beanName, args);
// 给 Bean 填充属性值
applyPropertyValues(beanName, bean, beanDefinition);
......@@ -46,6 +49,24 @@ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFa
return bean;
}
protected Object resolveBeforeInstantiation(String beanName, BeanDefinition beanDefinition) {
Object bean = applyBeanPostProcessorsBeforeInstantiation(beanDefinition.getBeanClass(), beanName);
if (null != bean) {
bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);
}
return bean;
}
protected Object applyBeanPostProcessorsBeforeInstantiation(Class<?> beanClass, String beanName) {
for (BeanPostProcessor beanPostProcessor : getBeanPostProcessors()) {
if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
Object result = ((InstantiationAwareBeanPostProcessor) beanPostProcessor).postProcessBeforeInstantiation(beanClass, beanName);
if (null != result) return result;
}
}
return null;
}
protected void registerDisposableBeanIfNecessary(String beanName, Object bean, BeanDefinition beanDefinition) {
// 非 Singleton 类型的 Bean 不执行销毁方法
if (!beanDefinition.isSingleton()) return;
......
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="userService" class="cn.noexception.test.bean.UserService"/>
<bean id="userService" class="cn.noexception.test.bean.impl.UserService"/>
<bean class="cn.noexception.container.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册