使用两种不同的上下文开发Spring Web应用程序

时间:2017-05-28 11:01:40

标签: java spring spring-mvc

spring reference documentation

第2.3节使用场景,有一个类似的段落

有时情况不允许您完全切换到其他框架。春天 框架呢 不  强迫你使用其中的一切;它不是 全有或全无  解。现有 使用Struts,Tapestry,JSF或其他UI框架构建的前端可以与Spring集成 基于中间层,允许您使用Spring事务功能。你只需要连接你的电话 使用ApplicationContext的业务逻辑   并使用WebApplicationContext   集成 您的网络图层。

现在我无法理解最后一句话。我们如何使用ApplicationContext连接业务逻辑并使用WebApplicationContext与Web层集成。我们怎样才能做到这一点?他们谈论的网络层是否包含控制器和jsps?

据我记得,如果我们需要一个类中的任何对象,我们只需自动装配它们,而spring将完成其余的工作。

有人可以提供一些例子说明。我刚刚开始学习春天,请原谅我的无知。

如果提出类似的问题,请有人指出我正确的方向

2 个答案:

答案 0 :(得分:1)

您可以设置两个甚至三个不同的项目或模块,每个项目或模块都有自己的上下文。例如,WebApplicationContext的Web项目,它呈现视图并调用业务方法,即从业务层使用restful Web服务。并设置一个单独的项目或模块来处理具有自己的上下文文件和bean的业务。甚至公共项目也计划在Web和业务层之间包含共享bean。

答案 1 :(得分:1)

即使您可以分层次地创建多个不同的上下文,也是可能的。

我将给出两个层次和非层次的答案。我将两者都使用基于java的配置。我将给出两个上下文的答案,但是你可以在很多情况下实现它。

1)非等级

创建两个不同的context.xml,假设context1.xmlcontext2.xml。 context1.xml应该是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns=..... some imports >

<context:annotation-config />
<context:component-scan base-package="desiredPackage1" />

<bean id="properties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>db.properties</value>
        </list>
    </property>
</bean>

<context:property-placeholder properties-ref="properties"/>

仅对context2.xml进行更改

<context:component-scan base-package="desiredPackage2" /> 

然后创建一个Configuration.java类,如下所示:

public class Config {

    public static void main(String[] args) throws Exception {

        ApplicationContext desiredContext1 = new ClassPathXmlApplicationContext("file:////...path.../context1.xml");

        ApplicationContext desiredContext2 = new ClassPathXmlApplicationContext("file:////...path.../context2.xml");
    }
}

现在您有两个不同的上下文,如果您想要分层次地,请更改主方法,如下所示: 的 2)分层式

public class Config {

    public static void main(String[] args) throws Exception {

        ApplicationContext desiredContext1 = new ClassPathXmlApplicationContext("file:////...path.../context1.xml");
        String[] congigPath = new String[1];
        congigPath[0] = "file:////...path.../context2.xml";
        ApplicationContext desiredContext2 = new ClassPathXmlApplicationContext(congigPath,desiredContext1);
    }
}

在这种情况下,desiredContext2对象可以看到desiredContext1对象,但desiredContext1对象看不到desiredContext2对象。

如果您想在构建Web应用程序时使用它,请在配置类

中使用此注释
@Configuration
@ImportResource("context1.xml", "context2.xml")
public class Config { ....

我希望这会对你有所帮助。