[ 
https://issues.apache.org/jira/browse/WW-4110?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

zhangkaitao updated WW-4110:
----------------------------

    Attachment: test.rar

please delete src/main/java patch
com.opensymphony.xwork2.spring.SpringObjectFactory 

test, will see resource is null;

but use this patch will be not null
                
> 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
>         Attachments: test.rar
>
>
> 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

Reply via email to