Java Spring问题:创建bean时出错,自动连线依赖项的注入失败

Java Spring问题:创建bean时出错,自动连线依赖项的注入失败,java,spring,hibernate,spring-mvc,servlets,Java,Spring,Hibernate,Spring Mvc,Servlets,因此,我正在努力学习spring,我已经阅读了很多教程,并试图从闪存驱动器中的项目中复制一些代码 我已经安装了tomcat,它可以正常工作,但是我仍然有一些问题。 问题是,我可以正常地从浏览器访问控制器的操作,没有问题,但是当我开始添加注释和ContextLoaderListener时,它一直给我一个404状态。我不知道我做了什么,但通过调整一些东西,我的浏览器至少尝试再次访问控制器。但是抛出了一个巨大的错误日志,我将在本文末尾与大家分享 这些是我的依赖项: junit 4.12 Spring

因此,我正在努力学习spring,我已经阅读了很多教程,并试图从闪存驱动器中的项目中复制一些代码

我已经安装了tomcat,它可以正常工作,但是我仍然有一些问题。 问题是,我可以正常地从浏览器访问控制器的操作,没有问题,但是当我开始添加注释和ContextLoaderListener时,它一直给我一个404状态。我不知道我做了什么,但通过调整一些东西,我的浏览器至少尝试再次访问控制器。但是抛出了一个巨大的错误日志,我将在本文末尾与大家分享

这些是我的依赖项:

  • junit 4.12
  • SpringWebMVC4.1.6.0版本
  • spring上下文4.1.6.1版本
  • SpringWeb 4.1.6.0版本
  • SpringBeans 4.1.6.1版本
  • spring数据jpa 1.8.0.0版本
  • spring jdbc 4.1.6.0版本
  • mysql连接器java 5.1.35
  • jstl 1.2
  • javax.servlet-api 3.1.0(提供范围)
  • javax.servlet.jsp-api 3.1.0(提供范围)
  • jackson数据绑定2.5.4
  • jackson core 2.5.4
  • jackson core asl 1.9.13
  • jackson-datatype-hibernate4 2.5.4
  • hibernate注释3.5.6-Final
  • hibernate commons annotations 3.2.0.Final
  • hibernate entitymanager 4.3.10.Final
  • jsondoc核心1.1.15
  • jsondoc springmvc 1.1.15
  • jsondoc ui webjar 1.1.15
  • commons日志记录1.2
  • 通用日志api 1.1
  • commons dbcp 1.4
我的构建插件是:

  • maven编译器插件3.1(源和目标1.8)
  • maven war插件2.4
My 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">
<display-name>Spring Web MVC Application</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:WEB-INF/application-context.xml
        classpath*:WEB-INF/persistence-context.xml
    </param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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">

<context:component-scan base-package="com.ve" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/my_database" />
    <property name="username" value="my_actual_db_user" />
    <property name="password" value="my_actual_db_password" />
</bean>

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="defaultDataSource" ref="dataSource" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitManager" ref="persistenceUnitManager" />
    <property name="persistenceUnitName" value="persistenceUnit" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<jpa:repositories base-package="com.ve" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager" />
证券服务

package com.ve.common.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ve.common.model.Stock;
import com.ve.common.repo.StockRepository;

@Service
public class StockService {

    @Autowired
    private StockRepository stockRepository;

    StockService(){}

    List<Stock> findStock(){
        return (List<Stock>) stockRepository.findAll();
    }
}
package com.ve.common.service;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入com.ve.common.model.Stock;
导入com.ve.common.repo.StockRepository;
@服务
公营股票服务{
@自动连线
私人证券库;
StockService(){}
列出findStock(){
return(List)stockRepository.findAll();
}
}
StockRepository

package com.ve.common.repo;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.ve.common.model.Stock;

@Repository
public interface StockRepository extends CrudRepository<Stock, Integer> {

    List<Stock> findByStockName(String stockName);

    Stock findByStockId(Integer stockId);
}
package com.ve.common.repo;
导入java.util.List;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
导入com.ve.common.model.Stock;
@存储库
公共接口StockRepository扩展了Crudepository{
列出findByStockName(字符串stockName);
Stock findByStockId(整数stockId);
}
我的模型是一个基本的实体类,它实现了Serializable(由JPA工具创建)。 现在这是我的项目结构,很抱歉,我不能把图片缩小(我现在在一个厕所里)。

这里引用了我在访问“”或“”时在浏览器中遇到的巨大错误

Servlet mvc调度程序的HTTP状态500-Servlet.init() 例外情况

类型异常报告

Servlet mvc调度程序的消息Servlet.init()引发异常

说明服务器遇到阻止它的内部错误 不履行这一要求

例外情况

javax.servlet.ServletException:servlet的servlet.init() mvc调度程序引发异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) run(Thread.java:745)

根本原因

org.springframework.beans.factory.BeanCreationException:错误 创建名为“stockController”的bean:自动连线的注入 依赖关系失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法 autowire字段:private com.ve.common.service.StockService com.ve.common.controller.StockController.stockService;嵌套 例外是 org.springframework.beans.factory.noSuchBean定义异常:否 为找到类型为[com.ve.common.service.StockService]的合格bean 依赖项:至少需要1个符合autowire条件的bean 此依赖项的候选项。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor.PostProcessPropertyValue(AutoWiredNotationBeanPostProcessor.java:334) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) org.springframework.beans.factory.supp
package com.ve.common.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ve.common.model.Stock;
import com.ve.common.repo.StockRepository;

@Service
public class StockService {

    @Autowired
    private StockRepository stockRepository;

    StockService(){}

    List<Stock> findStock(){
        return (List<Stock>) stockRepository.findAll();
    }
}
package com.ve.common.repo;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.ve.common.model.Stock;

@Repository
public interface StockRepository extends CrudRepository<Stock, Integer> {

    List<Stock> findByStockName(String stockName);

    Stock findByStockId(Integer stockId);
}
@Configuration
public class AppConfig {
    @Bean
    public StockService stockService() {
        return new StockServiceImpl();
    }
}
<beans>
    <bean name="stockService" class="com.ve.common.service.StockServiceImpl"/>
</beans>
<context:annotation-config />
<bean class ="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
       WEB-INF/application-context.xml
       WEB-INF/persistence-context.xml
    </param-value>
</context-param>