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

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

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

    guangnian0412's BLOG

    Java in my life

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    我關(guān)注的Blog

    最新評(píng)論

    Eclipse RCP與Spring的整合

    ??? Eclipse RCP與Spring的整合

    ??? 最近上一個(gè)項(xiàng)目想在Eclipse RCP中使用Spring,在網(wǎng)上Google了一下發(fā)現(xiàn)這方面的資料比較少,知道Spring自己有個(gè)Spring-OSGI的項(xiàng)目,可以在Spring中配置OSGI服務(wù)。可是,我只是想在RCP中引入Spring來(lái)管理Java Bean,不想去研究那個(gè)東西。于是,看看有沒有什么簡(jiǎn)單的方法來(lái)解決這個(gè)問(wèn)題。在陳剛的BlOG中找到了問(wèn)題的部分答案。
    ??????
    ??????? 于是,我在RCP項(xiàng)目的activator class中加入了

    ?1 ? ? private?ApplicationContext?ctx;
    ?2?
    ?3???? private?void?initializeApplicationContext()?{
    ?4?????????ClassLoader?oldLoader?=?Thread.currentThread().getContextClassLoader();
    ?5?????????try{
    ?6?????????????Thread.currentThread().setContextClassLoader(getDefault().getClass().getClassLoader());
    ?7?????????????this.ctx?=?new?FileSystemXmlApplicationContext(ProjectUtil.toFullPath("properties/applicationContext.xml"));
    ?8?????????}?finally?{
    ?9?????????????Thread.currentThread().setContextClassLoader(oldLoader);
    10?????????}
    11?????}

    ProjectUtil.toFullPath()方法在陳剛的BLOG中有詳細(xì)的說(shuō)明,是一個(gè)獲得項(xiàng)目絕對(duì)路徑的方法。另外在陳剛的BLOG中提到了,在Eclipse 3.2M6中已經(jīng)不需要轉(zhuǎn)換ClassLoader。但是,我用的是3.2 release版,還是需要轉(zhuǎn)換ClassLoader才能正常工作啊。覺得這并不像陳剛所說(shuō)的BUG,Eclipse的每個(gè)Plugin都有自己的ClassLoader,所以需要轉(zhuǎn)換吧。

    ??? 然后,在start方法中調(diào)用initializeApplicationContext方法,并為
    ctx提供getter

    1?????public?void?start(BundleContext?context)?throws?Exception?{
    2?????????super.start(context);
    3?????????initializeApplicationContext();
    4?????}
    5?
    6?????public?ApplicationContext?getApplicationContext()?{
    7?????????return?this.ctx;
    8?????}

    這樣我們?cè)谄渌胤骄涂梢杂?/span>
    Activator.getDefault().getApplicationContext()得到ApplicationContext了。

    ??????? 但是,新的問(wèn)題又來(lái)了,如何把RCP中的組件也納入Spring的管理呢,比如ViewPart。我又Google了一下,在今年的TSE2006上有一場(chǎng)報(bào)告就提到了Spring同Eclipse RCP的整合 ,里面提到了利用Eclipse的? ?? IExecutableExtensionFactory和IExecutableExtension接口,確實(shí)非常的簡(jiǎn)單。
    ? ? ? ? 通常,我們自己定義的ViewPart是通過(guò)擴(kuò)展點(diǎn)
    org.eclipse.ui.views,由Eclipse的Workbench自動(dòng)創(chuàng)建,像這樣:

    <extension?point="org.eclipse.ui.views">
    <view
    ????????? name="myView"
    ????????? class
    ="org.eclipse.example.rcpspring.MyView"
    ????????? id
    ="org.eclipse.example.rcpspring.view">
    </view>
    </extension>
    ?????
    ?????? 現(xiàn)在我們通過(guò)Spring來(lái)管理這個(gè)view,并假設(shè)為其注入一個(gè)businessService Bean,像這樣:

    <bean?id="myView" class="org.eclipse.example.rcpspring.MyView">
    <property?name="businessService" ref="businessService"/>
    </bean>

    ?????? 然后,我們要?jiǎng)?chuàng)建一個(gè)Extension Factory來(lái)在RCP中注冊(cè)這個(gè)view,代碼如下:

    ?1?public?class?MyViewExtensionFactory?implements?IExecutableExtensionFactory,
    ?2?????????IExecutableExtension?{
    ?3?????private?ViewPart?view;
    ?4?
    ?5?????public?Object?create()?throws?CoreException?{
    ?6?????????return?this.view;
    ?7?????}
    ?8?
    ?9?????public?void?setInitializationData(IConfigurationElement?config,
    10?????????????String?propertyName,?Object?data)?throws?CoreException?{
    11?????????this.view?=?(MyView)Activator.getDefault().getApplicationContext().getBean("myView");
    12?????????this.view.setInitializationData(config,?propertyName,?data);
    13?????}
    14?}

    通過(guò)
    Activator.getDefault().getApplicationContext()來(lái)取出上面建立的ApplicationContext。

    ????? 最后,我們要用這個(gè)
    MyViewExtensionFactory來(lái)注冊(cè)擴(kuò)展點(diǎn),如下:

    <extension?point="org.eclipse.ui.views">
    <view
    name="myView"
    class
    ="org.eclipse.example.rcpspring.MyViewExtensionFactory"
    id
    ="org.eclipse.example.rcpspring.view">
    </view>
    </extension>

    MyViewExtensionFactory 來(lái)取代原來(lái)的MyView

    ? ? ?? 好,已經(jīng)大功告成。MyView已經(jīng)成功的進(jìn)入了Spring框架的管理。其他的RCP擴(kuò)展點(diǎn)也可以如此炮制。 ???????????

    posted on 2006-12-30 21:11 guangnian 閱讀(5595) 評(píng)論(5)  編輯  收藏 所屬分類: JAVA其他

    評(píng)論

    # re: Eclipse RCP與Spring的整合 2008-06-19 15:24 win

    想請(qǐng)教一下:

    "ProjectUtil.toFullPath()方法在陳剛的BLOG中有詳細(xì)的說(shuō)明,是一個(gè)獲得項(xiàng)目絕對(duì)路徑的方法。"

    ----->ProjectUtil中的AdminConsolePlugin是什么?是他自己寫的類,還是公用開源包中的類?
    我不理解這兩個(gè)地方:
    1>import com.wxxr.management.admin.console.AdminConsolePlugin;
    2> private static AbstractUIPlugin plugin = AdminConsolePlugin.getDefault();

    所以我用不了這種方法。
    我的目的,是想在rcp中使用spring,hibernate.
    我在application方式下,可以成功用hibernate從數(shù)據(jù)庫(kù)中取值,但是,一放入rcp中的button中,就失敗。
    所以,看了你的文章以及陳剛的文章,但是,不明白以上的兩個(gè)地方,是什么?
    不管有沒有回復(fù),都感謝:)
    ----------------------------------------------
    .......
    import com.wxxr.management.admin.console.AdminConsolePlugin;

    /**
    * 用于插件項(xiàng)目和非插件項(xiàng)目,提供兩者通用的方法接口
    * @author chengang 2006-3-30
    */
    public class ProjectUtil {

    private static AbstractUIPlugin plugin = AdminConsolePlugin.getDefault();

    private ProjectUtil() {}
    .....  回復(fù)  更多評(píng)論   

    # re: Eclipse RCP與Spring的整合 2008-06-19 15:25 win

    我現(xiàn)在的問(wèn)題,是在rcp中取ctx,失敗。  回復(fù)  更多評(píng)論   

    # re: Eclipse RCP與Spring的整合 2008-08-31 23:38 zwy

    同樓上,我在測(cè)試main中可以利用ApplicationContext,但在RCP View中卻不能使用,總是報(bào)錯(cuò):Error creating the view.Reason:org/springframework/context/ApplicationContext.

    public static void main(String[] args) {

    ApplicationContext context = new ClassPathXmlApplicationContext("invoker-client.xml");
    IWarrantService service = (IWarrantService)context.getBean("warrantServiceProxy");
    warrantData.setContext(context);
    warrantData.setService(service);

    System.out.println("Oracle數(shù)據(jù)庫(kù)中共有"+ warrantData.getAllWarrants().size()+"條記錄");
    }  回復(fù)  更多評(píng)論   

    # re: Eclipse RCP與Spring的整合 2008-08-31 23:39 zwy

    請(qǐng)達(dá)人賜教,謝謝!  回復(fù)  更多評(píng)論   

    # re: Eclipse RCP與Spring的整合 2009-03-23 21:54 dcb

    http://dcbjavaeye.javaeye.com/admin/blogs/351449  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚洲色偷精品一区二区三区| 一级毛片视频免费| 亚洲国产专区一区| 老司机69精品成免费视频| 亚洲乱码一二三四区麻豆| 又色又污又黄无遮挡的免费视| 18禁在线无遮挡免费观看网站| 亚洲国产精品午夜电影| 亚洲高清成人一区二区三区| 久久国产乱子免费精品| 亚洲AV成人无码网天堂| 无码乱人伦一区二区亚洲| 在线中文高清资源免费观看| 免费精品久久天干天干| 亚洲第一成年网站视频 | 国产成人啪精品视频免费网| CAOPORN国产精品免费视频| 亚洲欧洲另类春色校园网站| 91麻豆精品国产自产在线观看亚洲| 蜜桃AV无码免费看永久| 黄 色一级 成 人网站免费| 亚洲欧洲精品成人久久曰| 亚洲AV无码久久精品成人| 免费在线不卡视频| 黄页免费的网站勿入免费直接进入| 黄视频在线观看免费| 亚洲中文字幕一区精品自拍| 亚洲AV成人精品网站在线播放 | 亚洲一级视频在线观看| 国产偷国产偷亚洲清高动态图| 女人张开腿等男人桶免费视频 | 爱丫爱丫影院在线观看免费 | 巨胸喷奶水视频www网免费| 亚洲精品免费视频| 9i9精品国产免费久久| 亚洲AV综合永久无码精品天堂| 18gay台湾男同亚洲男同| 亚洲成AV人片在线观看无码| 国产一区视频在线免费观看| 成人影片麻豆国产影片免费观看| 亚洲免费在线播放|