zhangkaitao created WW-4110: ------------------------------- Summary: struts2+spring intergration,when user aop, maybe inject fail Key: WW-4110 URL: https://issues.apache.org/jira/browse/WW-4110 Project: Struts 2 Issue Type: Improvement Components: Plugin - Spring Affects Versions: 2.3.1.1 Reporter: zhangkaitao
1、 @Autowired private Resource resource; //no setter <action name="myAction" class="cn.javass.MyAction"> 2、use aop, for example <aop:config proxy-target-class="true"> <aop:aspect ref="myAspect"> <aop:before method="before" pointcut="execution(* cn.javass.MyAction.*(..))"/> </aop:aspect> </aop:config> 3、StrutsSpringObject bean = autoWiringFactory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false); bean = autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, bean.getClass().getName()); // We don't need to call the init-method since one won't be registered. bean = autoWiringFactory.applyBeanPostProcessorsAfterInitialization(bean, bean.getClass().getName()); //generate proxy return autoWireBean(bean, autoWiringFactory); //inject error because proxy spring`s processing flow : (org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory): 1、InstantiationAwareBeanPostProcessor.applyBeanPostProcessorsBeforeInstantiation 2、InstantiationAwareBeanPostProcessor.applyBeanPostProcessorsAfterInitialization 如果此时有bean返回 直接返回; 3、doCreateBean 3.1、createBeanInstance 3.2、populateBean 3.2.1、InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation 3.2.2、autowire, for example AUTOWIRE_BY_NAME,AUTOWIRE_BY_TYPE 3.2.3、InstantiationAwareBeanPostProcessor.postProcessPropertyValues 3.2.4、applyPropertyValues 4、initializeBean 4.1、invokeAwareMethods 4.2、BeanPostProcessor.postProcessBeforeInitialization 4.3、invokeInitMethods 4.4、BeanPostProcessor.postProcessAfterInitialization 5、solution bean = autoWiringFactory.createBean(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false); bean = autoWireBean(bean, autoWiringFactory); bean = autoWiringFactory.initializeBean(bean, bean.getClass().getName()); -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira