2011-05-24 116 views
1

我有两个春季工程。两者都是当前的portlet。进口另一个春季工程的春季工程

我想借此之一,将其转换为一个罐子,(使用maven),将其添加为扶养其他然后调用代码)

任何意见上的步骤将是巨大的。

我都试过,虽然一切(INC上下文)被封装在我的罐子,它从Portlet消费应用程序上下文未加载/罐工作

Current jar structure 
application-context.xml 
META-INF/ 
<package>/classes 

EDIT_ 内调用类时出现_ Re错误:无法找到类x的豆定义

+0

你是否试图从jar中加载应用程序上下文而不工作?如果是这样错误信息? – 2011-05-24 13:34:40

回答

6

有几种方法可以做到这一点,但它高度依赖于您正在尝试做什么。您可以将上下文包含在web.xml中...

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml, classpath:childContext.xml</param-value> 
</context-param> 

另一种选择是直接从应用程序上下文中导入子上下文。

<import resource="classpath:childContext.xml/> 

我不是因为这些情况下获得合并这对于bean的名字是一场噩梦的这种过于大风扇;但是,他们确实工作。

通常最好的情况是你的JAR公开了某种工厂或静态构造函数,它读取它自己的Spring配置XML,然后简单地公开你想用作服务的东西。这可能不是针对您的特定问题的最佳解决方案,但需要考虑。

+0

谢谢我会尝试。(工厂/静态方法选项)所以我会在该方法中使用applicationContext对象 - 我的jar shoudl文件结构上的任何提示? - 我将编辑上面显示当前结构 – 2011-05-24 14:06:24

+0

像魅力一样工作!创建一个静态方法,加载上下文并从中获取服务bean。 – 2011-05-24 15:26:06

2

从技术上讲,安德鲁提供的答案将起作用。但是正如他所指出的那样,通过这种方式合并来自不同项目的bean通常不是一个好主意。 您可能想回退一点,并考虑以下问题:

  1. 为什么两个不同的项目在第一位?你想重复使用跨越多个父项目的第二个项目吗?
  2. 子上下文公开的哪些组件/服务需要由父上下文直接使用。

重新思考这些依赖关系可能会导致更优雅和可维护的解决方案。

+0

非常感谢,回答是肯定的。对第2个问题的回答是,代码暴露了一个服务,在dbs中查找信息以创建所有其他使用者使用的对象(我不想在每个项目中创建该对象) – 2011-05-24 14:01:15