您有几个问题(以下内容从您的帖子中显而易见)。
- 混合不同版本的Spring的jar
- 注释的位置错误
- 在您的应用程序上下文中重复。
- 使用版本化的XSD文件。
- 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>



