liferay @BeanReference

1.     BeanReference

Ø        com.liferay.portal.spring.annotation.BeanReferenceAnnotationBeanPostProcessor

 

implements BeanFactoryAware, InstantiationAwareBeanPostProcessor,

              MergedBeanDefinitionPostProcessor

 

       通过实现以上接口,完成BeanReference注解的功能。

BeanFactoryAware接口实现了beanFactory Aware.

InstantiationAwareBeanPostProcessor接口的3个方法:

l        Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException

l        boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException:实现带@BeanReference 注解Field属性转换对应的Bean对象。

l        public PropertyValues postProcessPropertyValues(

                     PropertyValues propertyValues,

                     PropertyDescriptor[] propertyDescriptors, Object bean,

                     String beanName):实现带@BeanReference 注解Method属性转换对应的Bean对象

l        public void postProcessMergedBeanDefinition(

                     RootBeanDefinition beanDefinition, Class beanType,

                     String beanName):实现* Post-process the given merged bean definition for the specified bean.

 

最终加载通过:

类:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.java

 

方法名:protected void populateBean(String beanName, AbstractBeanDefinition mbd, BeanWrapper bw)

// Give any InstantiationAwareBeanPostProcessors the opportunity to modify the

              // state of the bean before properties are set. This can be used, for example,

              // to support styles of field injection.

              boolean continueWithPropertyPopulation = true;

 

              if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {

                     for (Iterator it = getBeanPostProcessors().iterator(); it.hasNext();) {

                            BeanPostProcessor beanProcessor = (BeanPostProcessor) it.next();

                            if (beanProcessor instanceof InstantiationAwareBeanPostProcessor) {

                                   InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) beanProcessor;

                                   if (!ibp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)) {

                                          continueWithPropertyPopulation = false;

                                          break;

                                   }

                            }

                     }

              }

 

 

Ø        com.liferay.portal.spring.annotation.BeanReferenceElement

扩展了InjectionMetadata.InjectedElement类。

通过protected Object getResourceToInject(Object target, String requestingBeanName)方法来实现通过@BeanReference name对应的bean的获取。

 

 

 

Ø        com.liferay.portal.spring.annotation.BeanReferenceCallback

扩展了FieldCallbackMethodCallback类。

public void doWith(Field field):实现InjectionMetadata增加Field

public void doWith(Method method):实现InjectionMetadata增加Method

 

 

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值