Eclipse RCP与Spring的整合

最近上一个项目想在Eclipse RCP中使用Spring,在网上Google了一下发现这方面的资料比较少,知道Spring自己有个Spring-OSGI的项目,可以在Spring中配置OSGI服务。可是,我只是想在RCP中引入Spring来管理Java Bean,不想去研究那个东西。于是,看看有没有什么简单的方法来解决这个问题。在陈刚的BlOG中找到了问题的部分答案。

于是,我在RCP项目的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中有详细的说明,是一个获得项目绝对路径的方法。另外在陈刚的BLOG中提到了,在Eclipse 3.2M6中已经不需要转换ClassLoader。但是,我用的是3.2 release版,还是需要转换ClassLoader才能正常工作啊。觉得这并不像陈刚所说的BUG,Eclipse的每个Plugin都有自己的ClassLoader,所以需要转换吧。

然后,在start方法中调用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 }


这样我们在其他地方就可以用Activator.getDefault().getApplicationContext()得到ApplicationContext了。

但是,新的问题又来了,如何把RCP中的组件也纳入Spring的管理呢,比如ViewPart。我又Google了一下,在今年的TSE2006上有一场报告就提到了Spring同Eclipse RCP的整合 ,里面提到了利用Eclipse的 IExecutableExtensionFactory和IExecutableExtension接口,确实非常的简单。
通常,我们自己定义的ViewPart是通过扩展点org.eclipse.ui.views,由Eclipse的Workbench自动创建,像这样:


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


现在我们通过Spring来管理这个view,并假设为其注入一个businessService Bean,像这样:


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


然后,我们要创建一个Extension Factory来在RCP中注册这个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 }



通过Activator.getDefault().getApplicationContext()来取出上面建立的ApplicationContext。

最后,我们要用这个MyViewExtensionFactory来注册扩展点,如下:


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


用MyViewExtensionFactory 来取代原来的MyView 。

好,已经大功告成。MyView已经成功的进入了Spring框架的管理。其他的RCP扩展点也可以如此炮制。

[url]http://www.duduwolf.com/wiki/2006/154.html[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
eclipsercpspringosgi是两个在Java开发中广泛使用的技术。它们都可以用于构建桌面应用程序和服务。下面将分别详细介绍eclipsercpspringOSGi技术,并提供一些最佳实践建议。 首先是eclipsercp技术。eclipsercp是一组基于Eclipse平台的开发框架和工具,用于构建丰富的桌面应用程序。它提供了一套强大的插件机制,允许开发人员将应用程序拆分为模块,并以插件的形式进行扩展和定制。eclipsercp还提供了一些通用的UI组件和功能,使开发人员能够快速构建用户友好的应用程序。 然后是SpringOSGi技术。SpringOSGiSpring框架的一个扩展,用于将OSGi(开放服务网关初始化模型)技术与Spring集成。OSGi是一种动态模块化开发框架,它允许应用程序以模块化的方式进行构建和部署,以实现更好的可扩展性和模块化化。SpringOSGi通过提供一些额外的功能和API,简化了在OSGi环境中开发和管理应用程序的过程。 关于最佳实践建议,对于使用eclipsercpspringOSGi技术进行开发的开发人员,以下是一些建议: 1. 理解框架:深入了解eclipsercpspringOSGi的工作原理和核心概念非常重要。掌握框架的核心概念和技术细节,有助于更好地利用其功能和扩展性。 2. 模块化开发:利用框架提供的插件机制和模块化开发思想,将应用程序拆分为逻辑上独立的模块,并以插件的形式进行扩展和定制。 3. 灵活配置:利用框架提供的配置文件和扩展点机制,实现应用程序的灵活配置和定制。这有助于减少硬编码和提高应用程序的可配置性。 4. 使用合适的设计模式:熟悉并正确应用常用的设计模式,如观察者模式、工厂模式等,有助于提高应用程序的可维护性和可扩展性。 5. 单元测试:编写和执行合适的单元测试是开发过程中的一个重要环节。通过单元测试可以验证代码的正确性,并确保应用程序在不同环境中的稳定性和可靠性。 最后,学习和掌握eclipsercpspringOSGi技术需要一定的时间和实践经验。通过阅读书籍、参加培训、参与实际项目等方式,可以更加深入地了解这两个技术,并在实践过程中逐步提升自己的技术水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值