我有一个场景,我需要模拟以下内容 -
假设我有一个项目'LoadingBean'。在为“LoadingBean”加载应用程序上下文之后,我需要加载classA(从项目'External'作为添加到'Loading Bean'的类路径的JAR)。不仅如此,如果classA依赖于classB,甚至应该加载classB。
当前的应用程序上下文和要加载的新类通常应该在两个不同的JVM容器中运行。
我以这种方式解决了这个问题 -
Main.java
package com.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
Object obj = context.getBean("MessageBean");
System.out.println(obj);
}
}
的beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="MessageBean" class="com.bean.Message">
<property name="msg" value="Hello World!!!"/>
</bean>
<bean id="HelloWorldBean" class="com.bean.HelloWorld">
<property name="message" value="Howdie World!!!"/>
</bean>
</beans>
Message.java
package com.bean;
import org.springframework.beans.factory.annotation.Autowired;
public class Message {
@Autowired
private HelloWorld hw;
private String msg;
public HelloWorld getHw() {
return hw;
}
public void setHw(HelloWorld hw) {
this.hw = hw;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
HelloWorld.java
package com.bean;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Component;
@Component
public class HelloWorld {
private String message;
public String getMessage() {
try {
return new JSONObject(message).toString();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public void setMessage(String message) {
this.message = message;
}
}
ExternalBeans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="MessageBean" class="com.bean.Message">
<property name="msg" value="Hello World!!!"/>
</bean>
<bean id="HelloWorldBean" class="com.bean.HelloWorld">
<property name="message" value="Howdie World!!!"/>
</bean>
</beans>
我已经创建了一个简单的JAR,并将其包含在“LoadingBeans”的类路径中。在调用Message.java中的'get'函数时,应该加载HelloWorld及其JSON依赖项。
在Message.java上调用'get'时加载了HelloWorld类,但是没有加载JSON依赖项。它有解决方法吗? 有没有其他事情我需要照顾检查这种情况? 我不需要使用'runnable JAR'吧?由于“外部”没有主要方法。
答案 0 :(得分:0)
您的问题有点复杂,我无法连接引用的代码和您提到的JSON特定信息。
根据您的代码,因为 beans.xml 与您加载的 externalBeans.xml 相同,为什么需要复制它?您可以通过主方法很好地引用它, beans.xml , classA 和 classB 都来自同一个&#39;外部& #39;广口瓶中。