<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-7  評論-9  文章-0  trackbacks-0

    自動裝配即bean之間的依賴關(guān)系無需手動配置。

    1.    與自動裝配有關(guān)的配置

    org.apache.struts2.StrutsConstants類】

    Ø // Spring應(yīng)該如何裝配。有效值:’name’, ’type’, ’auto’ ’construtctor’

    STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE

    Ø // STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE選擇的自動裝配策略是否總是受重視的。默認(rèn)是false,遺留行為即試圖根據(jù)情況決定最好的策略。設(shè)置為true表示使用STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE設(shè)置的自動裝配策略。

    STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT

    Ø 3// Spring是否使用它的類緩存

    STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE

    2.    自動裝配原理

    首先根據(jù)在Struts.xml中定義Action時(shí)指定的class屬性值獲取Action實(shí)例

    appContext.getBean(beanName)

    如果獲取到,則直接返回。此時(shí)所使用的自動裝配策略是applicationContext.xml中設(shè)置的裝配策略。

    applicationContext.xmlbeans的默認(rèn)自動裝配策略是no,所以如果沒有設(shè)置<beansdefault-autowire="autodetect">或者beanautowire="byName",則Action中的屬性比如personManager不會進(jìn)行自動裝配。

    如果獲取不到,則調(diào)用buildBean(beanClazz, extraContext)

    如果struts.objectFactory.spring.autoWire.alwaysRespecttrue,此時(shí)會根據(jù)Struts定義的自動裝配策略(struts.objectFactory.spring.autoWire)進(jìn)行自動裝配

    如果struts.objectFactory.spring.autoWire.alwaysRespectfalse,則按constructor方式進(jìn)行自動裝配。

    參考SpringObjectFactory.java源代碼

        @Override

        public Object buildBean(String beanName, Map<String, Object> extraContext, boolean injectInternal) throws Exception {

            Object o = null;

            try {

                o = appContext.getBean(beanName);

            } catch (NoSuchBeanDefinitionException e) {

                Class beanClazz = getClassInstance(beanName);

                o = buildBean(beanClazz, extraContext);//使用Struts定義的自動裝配策略

            }

            if (injectInternal) {

                injectInternalBeans(o);

            }

            return o;

        }

        public Object buildBean(Class clazz, Map<String, Object> extraContext) throws Exception {

            Object bean;

            try {

                // Decide to follow autowire strategy or use the legacy approach which mixes injection strategies

                if (alwaysRespectAutowireStrategy) {

                    // Leave the creation up to Spring

                    bean = autoWiringFactory.createBean(clazz, autowireStrategy, false);

                    injectApplicationContext(bean);

                    return injectInternalBeans(bean);

                } else {

                    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());

                    return autoWireBean(bean, autoWiringFactory);

                }

            } catch (UnsatisfiedDependencyException e) {

                if (LOG.isErrorEnabled())

                    LOG.error("Error building bean", e);

                // Fall back

                return autoWireBean(super.buildBean(clazz, extraContext), autoWiringFactory);

            }

        }

    所有有兩種配置方式

    第一種:參見1集成步驟中的配置

    applicationContext.xml(配置beans的自動裝配策略)

    struts.xmlactionclass屬性值與application-context.xmlbeanid相同。

    第二種:

    applicationContext.xml(不配置beans的自動裝配策略)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>

    <bean id="login" class="com.jeff.action.LoginAction" scope="prototype">

    </bean>

    <bean id="personManager" class="com.jeff.service.PersonManager" scope="prototype">

    </bean>
    ...

    </beans>

    struts.xmlstruts.xmlactionclass屬性值與application-context.xmlbeanid不同,而是設(shè)置為Action的類名)

    <package name="first" extends="struts-default" >

    <action name="login1" class="com.jeff.action.LoginAction1">

    <result>/loginInfo.jsp</result>

    </action>

    </package>

    第二種配置方式,struts.objectFactory.spring.autoWire才有可能起作用。

    posted on 2010-11-30 17:01 jeffma 閱讀(5657) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费看男女下面日出水视频| 久久伊人久久亚洲综合| 国产亚洲精品美女| 久久精品国产精品亚洲艾草网美妙 | 亚洲人成色7777在线观看| 久久午夜夜伦鲁鲁片无码免费| 亚洲一区中文字幕在线电影网| 国产18禁黄网站免费观看| 久久国产福利免费| 国产成人精品日本亚洲直接| 亚洲日韩中文字幕日韩在线| 香港a毛片免费观看| 亚洲国产成人久久精品大牛影视 | 亚洲精品天堂成人片AV在线播放| jlzzjlzz亚洲乱熟在线播放| 免费观看的毛片大全| 少妇亚洲免费精品| 亚洲丰满熟女一区二区v| 亚洲精品一级无码鲁丝片| 毛片免费全部播放无码| 免费在线观看一区| 亚洲视频在线一区二区三区| 亚洲A丁香五香天堂网 | 四虎AV永久在线精品免费观看| 国产精品免费高清在线观看| 国产青草亚洲香蕉精品久久| 91亚洲国产成人精品下载| 亚洲第一永久AV网站久久精品男人的天堂AV | 99久久99这里只有免费的精品| 亚洲精品第一综合99久久| 亚洲精品夜夜夜妓女网| 国产精品免费小视频| 国产精品色拉拉免费看| 中国毛片免费观看| 青青青亚洲精品国产| 亚洲不卡视频在线观看| 久久精品国产亚洲av影院| 久久亚洲精品无码播放| 国产色爽免费视频| 国语成本人片免费av无码| 91在线老王精品免费播放|