如何将非Spring客户端与基于Spring的jar配置分离?

时间:2015-04-24 16:15:28

标签: java spring

我对Spring的经验有限,但我正在与真正喜欢它的人合作。我们构建了一组大量使用Spring的软件包,现在我们需要提供一个访问层,将该功能暴露给可能不使用Spring的客户端。

我的主要目标是不应要求访问层的客户端配置Spring以便使用它。显然Spring将在部署类路径上。在理想的世界中,客户端可以针对访问层包进行构建,并在不知道正在使用Spring的情况下进行部署。这可能吗? (不,使用远程服务不是一种选择。)

2 个答案:

答案 0 :(得分:2)

由于您不希望编写大量新代码,这些代码基本上连接应用程序的方式与Spring已经完成相同,您是否有可能将所有这些隐藏在某种“外观”类之后你会给你的客户吗?

例如,假设我有一个弹出上下文设置ServiceAServiceB(这些是客户端想要访问的服务)

我可以写一些像这样的课程......

public interface ClientServiceFacade {
    ServiceA getServiceA();

    ServiceB getServiceB();

    void shutdown();
}

public class ClientServiceFacadeFactory {
    public static ClientServiceFacade create() {
        return new ClientServiceFacadeImpl();
    }
}

public class ClientServiceFacadeImpl implements ClientServiceFacade {
    private static final CONTEXT_LOCATION = "classpath:spring/context.xml";

    private ClassPathXmlApplicationContext context;

    public ClientServiceFacadeImpl() {
        context = new ClassPathXmlApplicationContext(CONTEXT_LOCATION);
    }

    @Override
    public ServiceA getServiceA() {
        return context.getBean(ServiceA.class);
    }

    @Override
    public ServiceB getServiceB() {
        return context.getBean(ServiceB.class);
    }

    @Override
    public void shutdown() {
        context.close();
    }
}

您的客户仍然必须将spring JAR作为依赖项包含在内,但(除此之外)他们不知道Spring是否在后台使用。

答案 1 :(得分:1)

如何在静态块或静态init方法上初始化Spring上下文(如果要在外部触发)或在deamon线程上启动?