将独立的spring应用程序转换或集成到Spring MVC应用程序

时间:2013-01-06 16:31:45

标签: java spring servlets spring-mvc

将独立的spring应用程序转换或集成到Spring MVC应用程序。

我有一个具有以下结构的spring MVC应用程序

myApp
 |- META-INF
 |- WEB-INF
        |-classes
            |-com
                |-controllers
                |-service
        |-lib
           |-UserLibrary.jar
                |-META-INF
                    |-applicationContext.xml
                    |-dbre.xml
                    |-ehcache.xml
                    |-DataSource.xml
                    |-Jpa.xml
                    |-SpringDataJpa.xml
        |-applicationContext.xml
        |-myApp-servlet.xml

按照通常的过程加载Spring MVC。即控制器注释为@Controllers,服务注释为@Service等。

userLibrary.jar曾经是一个独立的spring应用程序,它有自己的Spring / JPA配置。它被转换,以便它可以集成到MVC应用程序中。它有自己的配置文件(总共约7个),它自己的Hibernate / JPA实体管理器等。

对于我在Spring MVC应用程序中使用它,我对服务类稍作修改,以便在WebApplicationContext完成初始化时加载UserLibrary应用程序的应用程序上下文。

public class MyAppService implements
        ApplicationListener<ContextRefreshedEvent> {

    protected UserLibraryService service;

        --
        -- several service methods etc
        --

    System.getProperty("username", "userA");
    System.getProperty("password", "userB");    

    @Override
    public void onApplicationEvent(ContextRefreshedEvent arg0) {        
        ApplicationContext context = 
         new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
        service = context.getBean(UserLibrary.class);
    }
}   

上述方法产生两个容器,即MVC应用程序的WebApplicationContext和UserLibrary应用程序的ApplicationContext。 我怀疑以上不是正确/最好的方法,所以我正在寻求什么是最好的方法的建议。例如,我可以使用单个容器而不是两个容器吗?

更新

这是我尝试过的。我从MVC应用程序的UserLibrary导入了applicationContext.xml应用程序的配置文件。

<import resource="classpath:META-INF/applicationContext.xml" />

然后我在MVC应用程序的UserLibraryBean文件中添加了applicationContext.xml(包含import语句的同一文件。

<bean class="com.service.UserLibraryService"/>

几个问题:

  • 更新的方法是仅使用一个容器还是仍然使用两个容器?<​​/ li>
  • UserLibraryService在初始化期间读取以下属性

    System.getProperty( “用户名”); System.getProperty( “密码”);

在我的原始示例中,我在onApplicationEvent方法中设置了上述值,UserLibray可以读取它们。

这些似乎不再设置,因此我从UserLibrary应用程序收到了尚未设置属性的错误。我也尝试在Service类的构造函数中设置它们,但它们仍未设置。

有没有办法在xml文件中将系统属性设置为bean定义的一部分?我在哪里可以设置属性,以便它们可用于服务对象?

由于

2 个答案:

答案 0 :(得分:2)

您可以在Web应用程序的web.xml中的context-param / contextConfigLocation参数中指定多个配置xml文件

您可以使用文件名上的classpath:前缀从类路径

加载它

答案 1 :(得分:1)

您可以阅读多个配置文件,例如 -

ApplicationContext context = 
         new ClassPathXmlApplicationContext(new String[] {"META-INF/userLibrary.xml",
              "META-INF/transaction.xml"});

您也可以使用 -

<import resource="META-INF/userLibrary.xml"/>