Spring MVC,配置的两个实例而不是一个

2023-12-01

我开始学习Spring MVC。我试图摆脱所有 Spring XML 配置。这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
  <!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
       instead of the default XmlWebApplicationContext -->
  <context-param>
      <param-name>contextClass</param-name>
      <param-value>
          org.springframework.web.context.support.AnnotationConfigWebApplicationContext
      </param-value>
  </context-param>

  <!-- Configuration locations must consist of one or more comma- or space-delimited
       fully-qualified @Configuration classes. Fully-qualified packages may also be
       specified for component-scanning -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>pl.mbrnwsk.sklep.config.AppConfiguration</param-value>
  </context-param>

  <!-- Bootstrap the root application context as usual using ContextLoaderListener -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- Declare a Spring MVC DispatcherServlet as usual -->
  <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext
           instead of the default XmlWebApplicationContext -->
      <init-param>
          <param-name>contextClass</param-name>
          <param-value>
              org.springframework.web.context.support.AnnotationConfigWebApplicationContext
          </param-value>
      </init-param>
      <!-- Again, config locations must consist of one or more comma- or space-delimited
           and fully-qualified @Configuration classes -->
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>pl.mbrnwsk.sklep.config.AppConfiguration</param-value>
      </init-param>
  </servlet>

  <!-- map all requests for / to the dispatcher servlet -->
  <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

应用程序配置.java:

@Configuration
@EnableTransactionManagement
@ComponentScan("pl.mbrnwsk.sklep")
public class AppConfiguration {

    public String hbm2ddl_auto = "update";

    public AppConfiguration(){
        System.out.println("AppConfiguration");
    }

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("org.hsqldb.jdbcDriver");
        ds.setUrl("jdbc:hsqldb:file:/SklepDB/");
        ds.setUsername("SA");
        ds.setPassword("");
        return ds;
    }

    @Bean
    public SessionFactory sessionFactory() {
        LocalSessionFactoryBuilder ss = new LocalSessionFactoryBuilder(dataSource());
        ss.scanPackages("pl.mbrnwsk.sklep.model");
        ss.setProperty("hibernate.show_sql", "true");
        ss.setProperty("hibernate.hbm2ddl.auto", hbm2ddl_auto);
        ss.setProperty("hibernate.dialect",
                "org.hibernate.dialect.HSQLDialect");
        return ss.buildSessionFactory();
    }

    @Bean
    public PlatformTransactionManager txManager(){
        return new HibernateTransactionManager(sessionFactory());   
    }
}

AppConfiguration 的实例被创建两次:一次是当我启动 Tomcat 时,两次是当我输入一些应该由调度程序处理的 url 时。这不是期望的行为。我想在 Tomcat 启动时创建 AppConfiguration。如何实现这一目标? 第二个问题,听众做什么?


这里的问题是您对 servlet 和根上下文使用相同的配置。这就是为什么你有两个配置实例。在 Spring MVC 中,您有 2 个上下文,servlet 上下文和根上下文。 servlet 上下文用于您的控制器,根上下文用于您的业务对象和服务。

如果您不想使用 XML,请创建两个配置类。像这样的东西:

根上下文 :

@Configuration
@EnableTransactionManagement
@ComponentScan("pl.mbrnwsk.sklep")
public class AppConfiguration {

    public String hbm2ddl_auto = "update";

    public AppConfiguration(){
        System.out.println("AppConfiguration");
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("org.hsqldb.jdbcDriver");
        ds.setUrl("jdbc:hsqldb:file:/SklepDB/");
        ds.setUsername("SA");
        ds.setPassword("");
        return ds;
    }

    @Bean
    public SessionFactory sessionFactory() {
        LocalSessionFactoryBuilder ss = new LocalSessionFactoryBuilder(dataSource());
        ss.scanPackages("pl.mbrnwsk.sklep.model");
        ss.setProperty("hibernate.show_sql", "true");
        ss.setProperty("hibernate.hbm2ddl.auto", hbm2ddl_auto);
        ss.setProperty("hibernate.dialect",
                "org.hibernate.dialect.HSQLDialect");
        return ss.buildSessionFactory();
    }

    @Bean
    public PlatformTransactionManager txManager(){
        return new HibernateTransactionManager(sessionFactory());   
    }
}

Servlet 上下文 :

@Configuration
@ComponentScan("pl.mbrnwsk.sklep.controller")
public class ServletConfiguration {

    public AppConfiguration(){
        System.out.println("ServletConfiguration");
    }

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

Web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">
      <!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
           instead of the default XmlWebApplicationContext -->
      <context-param>
          <param-name>contextClass</param-name>
          <param-value>
              org.springframework.web.context.support.AnnotationConfigWebApplicationContext
          </param-value>
      </context-param>

      <!-- Configuration locations must consist of one or more comma- or space-delimited
           fully-qualified @Configuration classes. Fully-qualified packages may also be
           specified for component-scanning -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>pl.mbrnwsk.sklep.config.AppConfiguration</param-value>
      </context-param>

      <!-- Bootstrap the root application context as usual using ContextLoaderListener -->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

      <!-- Declare a Spring MVC DispatcherServlet as usual -->
      <servlet>
          <servlet-name>dispatcher</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext
               instead of the default XmlWebApplicationContext -->
          <init-param>
              <param-name>contextClass</param-name>
              <param-value>
                  org.springframework.web.context.support.AnnotationConfigWebApplicationContext
              </param-value>
          </init-param>
          <!-- Again, config locations must consist of one or more comma- or space-delimited
               and fully-qualified @Configuration classes -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>pl.mbrnwsk.sklep.config.ServletConfiguration</param-value>
          </init-param>
      </servlet>

      <!-- map all requests for / to the dispatcher servlet -->
      <servlet-mapping>
          <servlet-name>dispatcher</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
</web-app>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC,配置的两个实例而不是一个 的相关文章

  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • 使用 Spring MVC 在 jar 文件中显示 jsp 页面

    我正在使用 Spring MVC 3 2 2 在 java 中开发一个 Web 应用程序 我在从 jar 文件中加载 jsp 页面时遇到问题 Spring MVC Web应用程序具有以下结构 META INF WEB INF spring
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • 是否可以使用 Apache Tika 提取表信息?

    我正在寻找 pdf 和 MS Office 文档格式的解析器 以从文件中提取表格信息 当我看到 Apache Tika 时 正在考虑编写单独的实现 我能够从任何这些文件格式中提取全文 但我的要求是提取表格数据 我希望有 2 列采用键值格式
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

    我想简化调用 Oracle 数据库的 Groovy 脚本的执行 如何将 ojdbc jar 添加到默认类路径以便我可以运行 groovy RunScript groovy 代替 groovy cp ojdbc5 jar RunScript
  • ebean 映射到 BYTEA 的数据类型是什么?

    我有一个游戏 2 0 2 需要在数据库中存储一些文件的应用程序 我们使用 Ebean 作为 ORM 我相信我的数据库中需要一个 BYTEA 列来存储该文件 但我不确定在我的模型中使用什么数据类型 我应该使用某种Blob 或者只是一个byte
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • 假布尔值=真?

    我在一本书中找到了这段代码 并在 Netbeans 中执行了它 boolean b false if b true System out println true else System out println false 我只是不明白为什
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • 使用 PHP 对图像进行圆角处理?

    有谁知道如何使用 PHP 脚本使图像具有圆角 可以使用 php gd 来完成 但我最终使用 CSS 将该任务传递给浏览器
  • Pandoc #4317 强制标题幻灯片下的内容包含在 pandoc > 2.7 的框架中

    在这个问题中我解释了我的目标 为书籍项目创建随附的幻灯片 我选择了Beamer幻灯片的格式 很高兴 然而 升级到Pandoc 2 7从此 gt 2 6 导致我的项目产生了不需要的幻灯片 具体来说 任何以前忽略的内容现在都被放入临时幻灯片中
  • 如何使可滚动元素填充父元素剩余高度的 100%?

    我有一个高度固定的容器 div 它有一些内容和另一个子元素 我希望子元素在填充剩余高度时滚动 我想出了一个似乎有效的解决方案 但我不确定它是否正确 Working fiddle 编辑 更新了小提琴以删除样式标签 有没有更好的办法 我不喜欢在
  • GetKeyboardLayout() 在某些情况下无法正常工作

    我正在编写应该指示键盘布局的控制台应用程序 我在用着GetForegroundWindow 获取当前活动窗口的函数 函数GetWindowThreadProcessId 获取线程id 最后使用函数GetKeyboardLayout 我得到键
  • 将 Java 日期转换为 UTC 字符串

    The java util Date toString 方法显示本地时区的日期 有几种常见的场景我们希望将数据打印在UTC 包括日志 数据导出以及与外部程序的通信 创建字符串表示的最佳方法是什么java util Date in UTC 如
  • 在 PHP 中将 2 个外观相似的不同种类的德语字符转换为相同的 ASCII 字符串

    我有这两个字符串 str1 O str2 e1 mb detect encoding str1 e2 mb detect encoding str2 var dump str1 var dump str2 echo e1 e1 e2 e2
  • 防止输入设备提交 angularjs 表单

    我正在开发一个应用程序 其中输入文本字段将由扫描仪扫描条形码来填充 问题是 当扫描仪扫描时 它会提交表单 它无法在扫描仪上禁用 因此我需要在表单 self 上禁用它 我在想
  • 删除 R 中给定类型的所有对象

    我该如何使用rm删除所有对象某种类型的 in R 我目前定义了一堆我想删除的函数 I know ls has a pattern选项 但这只有在我以模式命名所有函数时才会有帮助 我不是 Jilber 的答案的一个变体 rm list nam
  • 如何从 Android 活动 ping 网站并获得响应?

    我用了isReachable 但是没用 又用了ConnectivityManager和getNetworkInfo 实际上这只是为了检查我是否连接到互联网 但问题是我想检查是否可以访问互联网 所以我想 ping 一个网站以检查是否有响应 对
  • 适用于组的 Firebase 数据库规则

    我有这个 Firebase DB 如有必要可以更改 该数据库的 JSON 是 groups 1 name G1 points 1 name p1 visits 1 name v1 areas 1 name a1 waypoints 1
  • 如何阻止 Pow 服务器在计算机启动时启动 (OS X)?

    TL DR 有没有办法在我的机器启动时禁用 Pow 服务器启动 但保留通过以下方式手动启动服务器的能力powder up当我需要它运行时 我在用Pow为了我的本地发展 并通过粉末宝石 我想设置 Pow 以便服务器在启动时不会自动启动 因为运
  • delegate 在 xcode ios 项目中到底做了什么?

    我刚刚学习iPhone应用程序开发 但我很难理解委托的真正含义是什么 谁能举例说明它的作用以及它的重要性吗 感谢您的帮助 这是一个需要从概念上理解的关键概念 因此在技术细节之前了解如何思考它很重要 简单来说 委托就是一个回调 使用委托的两个
  • 调整 Google 地图标记图标图像的大小

    当我将图像加载到标记的图标属性中时 它会以其原始尺寸显示 这比应有的尺寸要大得多 我想将标准尺寸调整为较小尺寸 做这个的最好方式是什么 Code function addMyPos latitude longitude position n
  • 在 HTML 和 CSS 中更改表格中行的颜色

    尝试学习 HTML 和 CSS 我有一个简单的问题 如何为表格中的每一行指定不同的颜色 例如 第 1 行是红色 第 2 行是蓝色等 这是我的 HTML 代码 table font family Arial Helvetica sans se
  • 如何使用Python的FastFM库(因子分解机)进行推荐任务?

    我有一个数据集
  • 使用 PDO MySQL 编译 PHP 5.1.6

    我本来在 ServerFault 上问了这个问题没有得到任何回应 我认为它与编程相关 所以 这里 不久前 我们的一个大客户转向了一家托管提供商 该提供商指定了一个在所有实时服务器上保持一致的软件环境 其中包括 Apache 2 2 8 和
  • Gnu 汇编器 (GAS) 中的 CFI 指令有何用途?

    每行后面似乎都有一个 CFI 指令 并且这些指令也有很多种 例如 cfi startproc cfi endproc etc 更多这里 file temp c text globl main type main function main
  • 如何将无主键实体插入表?

    我正在使用 15 年历史的数据库 现在我们的场景是数据库优先 将实体插入主无键表 我阅读了很多 microsoft EF Core 文档 例如https learn microsoft com en us ef core modeling
  • PHP 中的 HTML 表单

    我正在用 php 脚本编写 html 表单代码 这里是 但提交网址后看起来像这样localhost codejudge submit php 但应该是这样的localhost codejudge submit php id STR 如果一个
  • Spring MVC,配置的两个实例而不是一个

    我开始学习Spring MVC 我试图摆脱所有 Spring XML 配置 这是我的 web xml