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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    12月1日struts、spring、hibernate等框架的整合培訓日記 (轉)

    http://blog.csdn.net/zhangxiaoxiang/archive/2006/12/12/1439362.aspx

    facade模式:就是中關村攢機者的角色,他負責與多個零件供銷商交互并將這些零件組裝起來交給最終客戶。
    struts與spring集成的兩種方式:
    第一種是在struts的Action的execute方法中調用spring的applicationContext去獲得Manager對象,這里的Action自身沒有用到spring的思想,Action無法作為Spring中的JavaBean進行配置,相應代碼如下:
    ????? ServletContext application = this.getServlet().getServletContext();
    ????? WebApplicationContext wapp = (WebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(application);
    ???? //WebApplicationContext wapp = (WebApplicationContext)application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    ???? StudentManager studentManager = (StudentManager)wapp.getBean("studentManager");
    ? 另外,spring為集成struts而提供了一個ContextLoaderPlugIn插件,其作用在于:創建一個ApplicationContext對象,并將這個對象存儲在ServletContext中,以后在ActionSupport中就可以調用getWebApplicationContext來獲得這個ApplicationContext對象了,這并沒有讓我感覺有多大的好處,示例代碼如下:
    ??? Enumeration e = application.getAttributeNames();
    ??? while(e.hasMoreElements())
    ??? {
    ??????? String attributeName = (String)e.nextElement();
    ??????? String objClassName = application.getAttribute(attributeName).getClass().getName();
    ??????? try
    ??????? {
    ?????????? response.getWriter().println(attributeName + ":" + objClassName + "<br>");
    ??????? }catch(Exception ex){}
    ??? }
    ??? StudentManager studentManager = this.getWebApplicationContext().getBean("studentManager"));

    第二種是將struts的Action作為spring的一個JavaBean進行配置,在Action里面只需要定義一個Manager變量和相應的setter/getter方法,就可以通過spring為其注入一個Manager對象。這種方式太復雜,很牽強,個人覺得沒有什么實際意義,建議大家不必花費時間去學習。

    spring與hibernate整合的原理:
    class MyController extend simpleformcontroller
    {
    ?public MyController()
    ?{
    ??setCommandClass(Studnet.class);
    ?}
    }
    首先回憶使用hibernate的步驟:
    1.創建和配置Configuration對象,配置Congiuration對象可以通過hibernate.properties或hiberate.cfg.xml文件,也可以完全采用如下的編程方式:
    ????? configuration = new Configuration()
    ????? configuration.addClass(Student.class)
    ???????????? //.addFile("Student.hbm.xml")
    ???????????? //.addResource("/Student.hbm.xml")
    ???????????? .setProperty("show_sql","true");
    2.由configuration創建出SessionFactory對象:????????????
    ??? SessionFactory sf = configuration.buildSessionFactory();
    3.通過SessionFactory獲得session對象,然后進行CRUD操作:
    ??? Session session = sf.openSession();
    ??? session.save()\delete\update\load\
    ??? session.close();
    使用spring集成hibernate的第一步就是借助spring的配置創建出SessionFactory對象
    <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    ?<property name="mappingResource?>
    ??<list>
    ???<value>xx.hbm.xml</value>
    ???<value>yyy.hbm.xml</value>
    ??<list>
    ?</Property>
    ?<property name="hibernateProperties">
    ??<props>
    ???<prop key="show_sql">true</prop>
    ??<props>
    ?</property>
    ?<property name="datasource"><ref locale=""/></property>
    </bean>
    在LocalSessionFactoryBean內部完全采用編程方式來配置configuration對象,而不再通過hibernate.properties或hiberate.cfg.xml配置文件,帶著大家查看了LocalSessionFactoryBean的源代碼。
    有了SessionFactory,我們接著就可以通過spring將這個SessionFactory注入到DAO類中,配置如下:
    <bean id="studentDAO" class="cn.itcast.StudentDAO">
    ?<property name="sessionFactory">
    ??<ref bean="sessionFactory" />
    ?</property>
    </bean>
    相應的調用程序代碼示意如下:
    class StudentDAO
    {
    ?sessionFactroy;
    ?void setSessionFactory(sessionFactory)
    ?{
    ??this.sessionFactory = sessionFactory;
    ?}
    ?insert(User user)
    ?{
    ??sessionFactory.openSession();//累
    ??session.save(user);
    ??session.close();//累
    ?}
    }
    我們還有自己openSession和getSession,這是不是很累呢?為此,spring又提供了一個配置類hibernateTemplate,它可以幫助我們去openSession和closeSession,這個配置類能夠openSession,顯然它一定要有SessionFactory的引用。
    <bean id="hibernateTemplate" class="HibernateTemplate">
    ?<property name="sessionFactory">
    ??<ref bean="sessionFactory" />
    ?</property>
    </bean>
    遵循spring的IOC思想,我們接著還要將HibernateTemplate注入到DAO類中,配置如下:
    <bean id="studentDAO" class="cn.itcast.StudentDAO">
    ?<property name="hibernateTemplate">
    ??<ref bean="hibernateTemplate" />
    ?</property>
    </bean>

    class StudentDAO
    {
    ?hibernateTemplate;
    ?void sethibernateTemplate(hibernateTemplate)
    ?{
    ??this.hibernateTemplate = hibernateTemplate;
    ?}
    ?insert(User user)
    ?{
    ??hibernateTemplate.save(user);//我們不再openSession和closeSession,不是很爽嗎?
    ?}
    }

    另外,spring還提供了一個HibernateSuport類,它可以通過注入的SessionFactory返回一個HibernateTemplate,我們的DAO類繼承這個HibernateSupport,也可以獲得HibernateTemplate對象進行CRUD操作,配置及示意代碼如下:
    <bean id="studentDAO" class="cn.itcast.StudentDAO">
    ?<property name="sessionFactory">
    ??<ref bean="sessionFactory" />
    ?</property>
    </bean>
    class StudentDAO extends HibernateSuport
    {
    ?/*hibernateTemplate;
    ?void gethibernateTemplate()
    ?{
    ??return hibernateTemplate;
    ?}
    ?sessionFactroy;
    ?void setSessionFactory(sessionFactory)
    ?{
    ??this.sessionFactory = sessionFactory;
    ??hibernateTemplate = new HibernateTemplate(sessionFactory);
    ?}*/
    ?
    ?
    ?insert(User user)
    ?{

    ??getHibernateTemplate().save(user);
    ?}
    }

    ?

    最后由王澤佑提問引出spring mvc的注冊綁定的詳細講解:
    在spring幫助文檔中搜索editor,可以看到有關注冊綁定的信息,CustomDateEditor是沒有被自動注冊的,需要用戶在initBinder方法內部調用,示例代碼如下:
    protected void initBinder(
    ??????? HttpServletRequest request,
    ??????? ServletRequestDataBinder binder)
    ??????? throws ServletException {
    ??????? binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
    ??? }
    一種替換的方式及registerCustomEditor底層的實現內幕:
    調用BaseCommandController.setPropertyEditorRegistrars()方法,顯然這可以作為controller的屬性進行配置。
    class MyPropertyEditorRegistrar
    {
    ?void registerCustomEditors(PropertyEditorRegistry registry)
    ?{
    ??reguistry.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
    ?}
    }

    關于Date數據校驗的問題:通過在struts幫助文擋的Validator幫助頁面中搜索validate,是可以搜索到DateValidator的配置幫助的。

    如果注冊了DateEditor,數據成功轉換成Date類型的字段,那么隨后的的Validator框架就沒必要對這個Date字段進行校驗了,因為Validator是對已裝配到Bean中的字符串類型的字段進行校驗,而數據都已經成功裝配進了Date字段中,哪還有校驗的必要。框架把數據裝配到formbean里面,Validator從Formbean里面拿數據進行校驗。


    <bean id="myController class="cn.itcast.MyController">
    ?<property key="commandClass">
    ??<value>cn.itcast.Student</value>
    ?</prperty>
    </bean>
    上面的配置信息相當于下面的一段代碼,這其中就涉及到了屬性綁定的問題,要把字符串"cn.itcast.Student"轉換成Class對象。
    Class clazz = Class.forName("cn.itcast.Student");
    setCommandClass(clazz);

    小記:通過spring配置文件中的<import>元素的resource屬性可以導入更多的配置文件,實現信息分散配置的目的。?


    posted on 2007-02-02 09:10 都市淘沙者 閱讀(458) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 日韩在线一区二区三区免费视频| 亚洲成年网站在线观看| 乱爱性全过程免费视频| 国产成人高清精品免费软件 | 91精品成人免费国产| 亚洲国产综合精品中文字幕| 污污视频免费观看网站| www.亚洲精品.com| 日韩a毛片免费观看| 亚洲国产精品13p| 两个人看www免费视频| 亚洲精品无码高潮喷水在线| 免费福利在线视频| 日韩精品一区二区亚洲AV观看| 91精品国产免费久久国语麻豆| 亚洲国产精品人久久电影| 噼里啪啦电影在线观看免费高清| 亚洲色成人网站WWW永久四虎 | 国产性生大片免费观看性 | 好爽好紧好大的免费视频国产| 鲁死你资源站亚洲av| 亚洲精品麻豆av| 久久精品无码免费不卡| 亚洲va在线va天堂va四虎 | 日韩精品极品视频在线观看免费 | 四虎永久免费地址在线网站| jizz18免费视频| 67pao强力打造67194在线午夜亚洲 | 老司机午夜在线视频免费观| 亚洲乱码日产一区三区| 在线观看www日本免费网站| 亚洲午夜无码久久久久小说| 亚洲欧洲自拍拍偷精品 美利坚 | 99视频有精品视频免费观看| 亚洲已满18点击进入在线观看| 免费a级毛片大学生免费观看| 热久久这里是精品6免费观看| 国产日本亚洲一区二区三区| 亚洲成aⅴ人片久青草影院| 2022久久国产精品免费热麻豆| 男人的天堂av亚洲一区2区|