我对Spring的经验有限,但我正在与真正喜欢它的人合作。我们构建了一组大量使用Spring的软件包,现在我们需要提供一个访问层,将该功能暴露给可能不使用Spring的客户端。
我的主要目标是不应要求访问层的客户端配置Spring以便使用它。显然Spring将在部署类路径上。在理想的世界中,客户端可以针对访问层包进行构建,并在不知道正在使用Spring的情况下进行部署。这可能吗? (不,使用远程服务不是一种选择。)
答案 0 :(得分:2)
由于您不希望编写大量新代码,这些代码基本上连接应用程序的方式与Spring已经完成相同,您是否有可能将所有这些隐藏在某种“外观”类之后你会给你的客户吗?
例如,假设我有一个弹出上下文设置ServiceA
和ServiceB
(这些是客户端想要访问的服务)
我可以写一些像这样的课程......
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线程上启动?