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