Загрузка бобов из банки с зависимостью

У меня есть сценарий, в котором мне нужно смоделировать следующее:

Скажем, у меня есть проект "LoadingBean". Мне нужно загрузить classA (из проекта "Внешний" как JAR, добавленный к пути к классу "Loading Bean") после загрузки контекста приложения для "LoadingBean". Не только это, если classA имеет зависимость от classB, даже classB должен быть загружен.

Текущий контекст приложения и новые классы, которые должны быть загружены, обычно должны работать в двух разных контейнерах JVM.

Я решил проблему таким образом:

  1. Загрузка Beans содержит

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. "Внешний" содержит

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". При вызове функции get в Message.java загружается HelloWorld и его JSON-зависимости.

Класс HelloWorld загружается при вызове get для Message.java, но зависимости JSON не загружаются. Есть ли обходной путь для этого? Есть ли еще что-то, о чем мне нужно позаботиться, чтобы проверить этот сценарий? Мне не нужно использовать "работающий JAR" правильно? Поскольку в "Внешнем" нет основного метода.

1 ответ

Ваш вопрос немного сложен, и я не могу связать цитируемый код и JSON-информацию, которую вы упоминаете.

Однако, исходя из вашего кода, поскольку beans.xml идентичен загруженному файлу externalBeans.xml, зачем вам его копировать? Вы можете очень хорошо сослаться на него через ваш основной метод, и beans.xml, classA и classB все взяты из одного и того же "внешнего" jar.

Другие вопросы по тегам