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

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

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

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開(kāi)發(fā)
    最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
    本站的官方站點(diǎn)是:顛覆軟件

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評(píng)論 :: 0 Trackbacks

     

    key word : spring,service

    在基于struts+spring+hibernate的開(kāi)發(fā)框架下,一般service都是直接通過(guò)在Struts的action中g(shù)etBean("yourServiceName")來(lái)獲取,那么如果在serviceA中想調(diào)用serviceB中的方法該如何呢?

    直接new 一個(gè)serviceB是不行的,因?yàn)槔锩婵赡苓€有依賴注入的dao等其他本來(lái)需要容器管理的資源,可以象在action中一樣getBean()么?

    獲得applicationContext就可以了:

    AppContext :

    public class AppContext {
        
    private static ApplicationContext applicationContext;
        
        
    public static ApplicationContext getApplicationContext() {
            
    return applicationContext;
        }

        
    public static void setApplicationContext(
                ApplicationContext applicationContext) 
    {
            AppContext.applicationContext 
    = applicationContext;
        }

    }


    SpringService:

    public class SpringBeanService {
        
    private static SpringBeanService instance;

        
    private ApplicationContext applicationContext;

        
    public static synchronized SpringBeanService getInstance() {
            
    if (instance == null{
                instance 
    = new SpringBeanService();
            }

            
    return instance;
        }


        
    public ApplicationContext getApplicationContext() {
            
    return this.applicationContext;
        }


        
    public void setApplicationContext(ApplicationContext applicationContext) {
            
    this.applicationContext = applicationContext;
        }


        
    public UserService getUserService(){
            
    return (UserService)AppContext.getApplicationContext().getBean("userService");
        }

        
        }



    ApplicationContext的初始化:

    public class ConfigLoadListener implements ServletContextListener {

        
    public void contextInitialized(ServletContextEvent contextEvent) {  
            
    try {
                WebApplicationContext context =WebApplicationContextUtils.getRequiredWebApplicationContext(contextEvent.getServletContext());
                AppContext.setApplicationContext(context);

                
    //讀配置
                try {
                    ServletContext context2
    =contextEvent.getServletContext();
                    String path
    =context2.getInitParameter("setting.properties");
                    InputStream in 
    =context2.getResourceAsStream(path);
                    Properties properties 
    = new Properties();
                    properties.load(in);
                    GlobalConstant.setCmdbProperties(properties);
                    in.close();
                }
     catch (IOException e) {
                    e.printStackTrace();
                }

            }
     catch (HibernateException e) {
                System.out.println(
    "系統(tǒng)無(wú)法初始化,異常退出");
                System.out.println(e);
            }

        }

       
        
    public void contextDestroyed(ServletContextEvent contextEvent) {
        }

    }


     感覺(jué)有點(diǎn)麻煩,有更簡(jiǎn)便的辦法了么?

    update(2007-5-15):
    這篇文章大家可以參考一下,和本文有類(lèi)似之處:
     Struts調(diào)用Spring服務(wù)類(lèi)的三種方法

    引用:

    3.朋友幫忙型  朋友多了好辦事,凡事都自己動(dòng)手總有一天會(huì)活活累死,所有Action為自己需要的Service提供setter,并且在Spring中注入,好累啊。小學(xué)生都在減負(fù)了,我們也來(lái)為Action減減負(fù)吧--提供一個(gè)專(zhuān)門(mén)  
    查找Serivice的ServiceLocator,負(fù)責(zé)獲取所有的Service,該類(lèi)為每個(gè)Service提供專(zhuān)門(mén)的獲得方法,如:  


     

    posted on 2007-05-14 09:05 Alex 閱讀(13384) 評(píng)論(8)  編輯  收藏 所屬分類(lèi): javaSpring

    評(píng)論

    # re: Spring中的service之間如何調(diào)用 2007-05-14 09:23 劉甘泉
    有啊,在spring里配置上b注入a即可,不過(guò)可能失去spring的事務(wù)性控制。
    另,感覺(jué)你的設(shè)計(jì)可能有問(wèn)題,所以才會(huì)有serviceA掉用serviceB的問(wèn)題。
    相關(guān)的業(yè)務(wù)都是放到一個(gè)service里面的,如serviceA.executeA()里面調(diào)用了daoA.insert和daoB.update 而serviceB.executeB()調(diào)用了daoB.update,看起來(lái)可以換成是serviceA調(diào)用了serviceB,其實(shí)不對(duì)的,一個(gè)事務(wù)應(yīng)該保持事務(wù)的一致性,即一個(gè)事務(wù)只應(yīng)該做一個(gè)事務(wù)的事。
    而你的那種配置方法是在serviceA中調(diào)用serviceB,serviceB本身就是由spring 控制的事務(wù),當(dāng)你在serviceA中調(diào)用過(guò)serviceB.后,spring會(huì)自動(dòng)提交serviceB的事務(wù),并不是在serviceA完成的時(shí)候提交。

    如有不對(duì)請(qǐng)指教  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2007-05-14 09:29 dennis
    用了spring,還在action中使用getBean?奇怪了  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2007-05-14 09:46 dennis
    struts和spring的整合不應(yīng)該在action中使用getBean的方式,這完全背離了使用spring的初衷,造成了對(duì)spring的依賴,更好的方式請(qǐng)看江南大俠http://m.tkk7.com/calvin/archive/2006/11/17/81711.html

    service的互相調(diào)用,原來(lái)怎么配,現(xiàn)在也怎么配,只要在spring配置文件中設(shè)置下依賴關(guān)系,使用的service有個(gè)setter方法就可以了??纯催@篇文章http://www.javaeye.com/topic/35907  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2007-05-14 10:05 劉甘泉
    不錯(cuò) ,嵌套事務(wù),PROPAGATION_NESTED,transactiondefinition就可以了  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2007-05-15 11:17 Alex
    to dennis
    我個(gè)人不太喜歡在action中注入service,感覺(jué)羅嗦了
    service中注入dao就可以了,到處在注入感覺(jué)很不爽,個(gè)人感覺(jué).  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2007-05-15 14:41 劉甘泉
    @Alex
    證明你的分層思想還不到位~~,dao只是對(duì)于數(shù)據(jù)庫(kù)的操作,并不涉及業(yè)務(wù)流程,而一個(gè)業(yè)務(wù)流程可能經(jīng)過(guò)了n個(gè)dao的操作,如果注入到action中的話,那維護(hù)起來(lái)不是很麻煩,而且事務(wù)管理的好處也不在了~~~  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2014-03-09 20:53 xxli
    對(duì)Spring事務(wù)傳播行為最常見(jiàn)的一個(gè)誤解是:當(dāng)服務(wù)接口方法發(fā)生嵌套調(diào)用時(shí),被調(diào)用的服務(wù)方法只能聲明為 PROPAGATION_NESTED。這種觀點(diǎn)犯了望文生義的錯(cuò)誤,誤認(rèn)為PROPAGATION_NESTED是專(zhuān)為方法嵌套準(zhǔn)備的。這種誤解遺害不 淺,執(zhí)有這種誤解的開(kāi)發(fā)者錯(cuò)誤地認(rèn)為:應(yīng)盡量不讓Service類(lèi)的業(yè)務(wù)方法發(fā)生相互的調(diào)用,Service類(lèi)只能調(diào)用DAO層的DAO類(lèi),以避免產(chǎn)生嵌 套事務(wù)。  回復(fù)  更多評(píng)論
      

    # re: Spring中的service之間如何調(diào)用 2014-03-09 20:54 xxli
    具體查看文章http://www.cnblogs.com/aurawing/articles/1887030.html  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: a高清免费毛片久久| 久久亚洲综合色一区二区三区 | 亚洲日本一区二区一本一道| 三年片在线观看免费大全| 91香蕉国产线在线观看免费| 97公开免费视频| 99re6热视频精品免费观看 | 亚洲人成毛片线播放| 久久精品亚洲一区二区三区浴池 | 亚洲VA综合VA国产产VA中| 亚洲爆乳精品无码一区二区三区| 亚洲国产高清在线一区二区三区 | 91人人区免费区人人| 99精品在线免费观看| 永久免费在线观看视频| 永久免费视频网站在线观看| 男女超爽刺激视频免费播放| 成人毛片18岁女人毛片免费看| 猫咪社区免费资源在线观看| 卡1卡2卡3卡4卡5免费视频| 成人免费视频国产| 亚洲精品国精品久久99热| 国产亚洲精品影视在线产品| 亚洲VA中文字幕不卡无码| 亚洲精品视频免费| 国产亚洲成av片在线观看| 亚洲欧洲一区二区| 亚洲精品美女在线观看播放| 亚洲 欧洲 视频 伦小说| 亚洲av乱码中文一区二区三区| 男女污污污超污视频免费在线看| 中文在线观看免费网站| 久久久精品2019免费观看| 在线观看AV片永久免费| 国产成人免费a在线视频色戒| 久久精品国产亚洲7777| 久久久久亚洲AV成人片| 亚洲欧美自偷自拍另类视| yy一级毛片免费视频| 伊人久久免费视频| 成人人免费夜夜视频观看|