??? 最近上一个项目想在Eclipse RCP中使用Spring,在网上Google了一下发现这方面的资料比较少,知道Spring自己有个Spring-OSGI的项目,可以在Spring中配置OSGI服务。可是,我只是想在RCP中引入Spring来管理Java Bean,不想去研究那个东西。于是,看看有没有什么简单的方法来解决这个问题。在陈刚的BlOG中找到了问题的部分答案。
??????
??????? 于是,我在RCP项目的activator class中加入了
?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
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自动创建,像这样:
<view
????????? name="myView"
????????? class="org.eclipse.example.rcpspring.MyView"
????????? id="org.eclipse.example.rcpspring.view">
</view>
</extension>
?????? 现在我们通过Spring来管理这个view,并假设为其注入一个businessService Bean,像这样:
<property?name="businessService" ref="businessService"/>
</bean>
?????? 然后,我们要创建一个Extension Factory来在RCP中注册这个view,代码如下:
?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来注册扩展点,如下:
<view
name="myView"
class="org.eclipse.example.rcpspring.MyViewExtensionFactory"
id="org.eclipse.example.rcpspring.view">
</view>
</extension>
用MyViewExtensionFactory 来取代原来的MyView 。
? ? ?? 好,已经大功告成。MyView已经成功的进入了Spring框架的管理。其他的RCP扩展点也可以如此炮制。
详细解决方案
Eclipse RCP与Spring的调整
热度:22 发布时间:2016-04-23 02:17:52.0
??? Eclipse RCP与Spring的整合
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1 ? ? private?ApplicationContext?ctx;
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1?????public?void?start(BundleContext?context)?throws?Exception?{
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><extension?point="org.eclipse.ui.views">
????? <!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><bean?id="myView" class="org.eclipse.example.rcpspring.MyView">
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->?1?public?class?MyViewExtensionFactory?implements?IExecutableExtensionFactory,
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><extension?point="org.eclipse.ui.views">
1 楼 fy_kenny 2011-10-18
Spring到底有什么优点,需要程序员这么复杂的搞一个rcp的viewpart的注入?
相关解决方案
- Spring MVC开发模式,怎么取得新增的id
- eclipse struts2找不到action!调了一个晚下了
- spring 表单对象绑定有关问题 String与Long的转换
- spring+quartz定时器有关问题
- spring @Scope("prototype")注解更新有关问题,寻求帮助
- Spring MVC是不是可以完全取代Struts
- spring+quartz的错误,不能正常启动
- spring mvc +ibatis+db2连接数据库的配置如何写啊小弟我链接不下
- spring MVC cvc-complex-type.2.4.c解决方案
- Spring + Mybatis 组合报错
- Spring 中 packagesToScan有关问题
- Spring MVC中点击旋钮没反应
- spring aop这个跳转异常是咋回事
- spring security3的一个小疑点。加急
- spring 事务 aop transactionManager,该怎么解决
- Spring 事务管理,该怎么处理
- 关于 Spring 声明式事务管理!解决办法
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- Eclipse + Tomcat Debug時很慢,该怎么解决
- eclipse+tomcat6.0+oracle 10g配置数据库连接池的异常
- 关于 Spring 宣言式事务管理!
- 求SSM分页 struts +spring+mybatis 给小弟我发个学习学习吧 多谢大神们
- spring placeholderConfig的有关问题
- spring 事宜 aop transactionManager
- Spring 事务管理,该怎么解决
- struts2 + spring 整合有关问题
- struts+spring+mybatis出现错误(java.lang.ClassNotFoundException: Entity)为提示位置
- 求解 struts+spring+mybatis sqlsession为空 debug发现没有执行set方法 检查配置好像没有关问题
- 新手求教。spring+axis2集成的有关问题。The endpoint reference (EPR) for the Operation not found
- Spring 和 hibernate如何配置事物