栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Context初始化(java)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Context初始化(java)

您有几个问题(以下内容从您的帖子中显而易见)。

  1. 混合不同版本的Spring的jar
  2. 注释的位置错误
  3. 在您的应用程序上下文中重复。
  4. 使用版本化的XSD文件。
  5. web.xml中的版本冲突

1.混合不同版本的Spring的Jars

  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>4.0.3.RELEASE</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>4.0.4.RELEASE</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>      <version>4.0.3.RELEASE</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>4.0.1.RELEASE</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>4.0.1.RELEASE</version>  </dependency>  <dependency>      <groupId>javax.servlet</groupId>      <artifactId>servlet-api</artifactId>      <version>2.5</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>3.0.5.RELEASE</version>  </dependency>

您的pom上堆满了来自不同spring版本(3.0.5、4.0.1、4.0.3和4.0.3)的广口瓶。如果您要麻烦,那是要走的路。始终坚持使用单一版本的框架,不要混用不同版本的jar。这不仅适用于Spring,而且适用于所有(多罐)框架。

使用Maven的功能来帮助您,指定一个属性以保存要使用的Spring版本并使用该属性。

<properties>    <spring.version>4.0.4.RELEASE</spring.version></properties><dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>${spring.version}</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>${spring.version}</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>      <version>${spring.version}</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>${spring.version}</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>${spring.version}</version>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>${spring.version}</version>  </dependency>

如果Spring Data JPA具有不同的版本,则可能需要添加更多依赖项,具体取决于Spring Data JPA引入的依赖项。

2.注释的位置错误

@Servicepublic interface Store {    boolean get();}

注释不是从接口继承的,因此将注释放在接口上几乎没有用。Spring有一些针对特定注释的技巧,例如

@Transactional
但不是针对此。将注释移至具体的实现,不要将其放在界面上。

@Servicepublic class Controller {    @Autowired    private Store storeImpl;    public void use() {       storeImpl.get();    }}

我在这里看不到任何东西,

@Controller
或者什么也从未看到,
@RequestMapping
所以我不确定您如何认为Spring检测并处理了此类。

3.在您的应用程序上下文中进行复制。

<context:annotation-config />
将其从您的上下文中删除,因为使用已经暗示了这一点
<context:component-scan />

<mvc:annotation-driven/>
应该仅在
DispatcherServlet
您的情况下(如果您已发布实际代码)由加载的xml文件中,该文件应为
dispatcher-servlet.xml

<context:component-scan ../>
在两个xml文件中都有相同的元素,这将导致Bean复制。由加载的文件
ContextLoaderListener
应加载除以外的任何内容
@Controllers
,而
DispatcherServlet
应当仅加载
@Controllers
并且忽略其他任何内容。为此,在组件扫描时使用包含/排除过滤器。

将其用于

ContextLoaderListener

<context:component-scan base-package="com.mycompany.app">    <context:exclude-filter type="annotation" expression="org.springframework.stereotype. Controller" /><context:component-scan>

将其用于

DispatcherServlet

<context:component-scan base-package="com.mycompany.app" use-default-filters="false >    <context:include-filter type="annotation" expression="org.springframework.stereotype. Controller" /><context:component-scan>

另外,请勿将的配置

DispatcherServlet
导入,
ContextLoaderListener
因为这将再次导致Bean复制。

4.使用版本化的XSD文件。

xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-3.0.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

您的架构位置使用版本化的XSD文件,建议使用无版本的xsd文件。这将确保将加载属于您当前的Spring版本的xsd版本。

xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

5. web.xml中的版本冲突

<!DOCTYPE web-app PUBLIC    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app id="WebApp_ID" version="2.4"     xmlns="http://java.sun.com/xml/ns/j2ee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

您想要什么2.4版本2.3?您在pom中包含servlet-api 2.5,我希望您想要版本3.0。相应地更改标头(和Maven依赖项)。

web.xml
标题更改为以下内容。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"     version="3.0">

更新您的pom.xml以包含Servlet 3.0规范。

<dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.0.1</version>    <scope>provided</scope></dependency>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号