从依赖jar的jar加载bean

时间:2015-02-02 05:39:38

标签: java spring applicationcontext

我有一个场景,我需要模拟以下内容 -

假设我有一个项目'LoadingBean'。在为“LoadingBean”加载应用程序上下文之后,我需要加载classA(从项目'External'作为添加到'Loading Bean'的类路径的JAR)。不仅如此,如果classA依赖于classB,甚至应该加载classB。

当前的应用程序上下文和要加载的新类通常应该在两个不同的JVM容器中运行。

我以这种方式解决了这个问题 -

  1. LoadingBeans包含 -
  2. 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>
    
    1. '外部'包含 -
    2. 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'吧?由于“外部”没有主要方法。

1 个答案:

答案 0 :(得分:0)

您的问题有点复杂,我无法连接引用的代码和您提到的JSON特定信息。

根据您的代码,因为 beans.xml 与您加载的 externalBeans.xml 相同,为什么需要复制它?您可以通过主方法很好地引用它, beans.xml classA classB 都来自同一个&#39;外部& #39;广口瓶中。