如何在系统启动时能够调用spring mvc 时间注解的注解@Service方法

Spring依赖注入:注解注入总结 - 为程序员服务
为程序员服务
Spring依赖注入:注解注入总结
注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component。
Autowired是自动注入,自动从spring的上下文找到合适的bean来注入
Resource用来指定名称注入
Qualifier和Autowired配合使用,指定bean的名称
Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。
Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。
上面的Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。
下面我们通过实例项目来看下spring注解注入的使用。
首先新建一个maven项目,并在pom中添加spring相关的依赖,如果不知道添加那些依赖,请参照上一篇文章。
然后新建CarDao类,给它添加@Repository注解,如下代码:
package cn.outofmemory.
import org.springframework.stereotype.R
@Repository
public class CarDao {
public void insertCar(String car) {
String insertMsg = String.format(&inserting car %s&, car);
System.out.println(insertMsg);
新建CarService类,并给该类标注@Service注解,在这个类中定义CarDao的字段,并通过Autowired来修饰此字段,这样上面定义的CarDao类的实例就会自动注入到CarService的实例中了。
package cn.outofmemory.
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
public class CarService {
@Autowired
private CarDao carD
public void addCar(String car) {
this.carDao.insertCar(car);
注意:Autowired注解有一个可以为空的属性required,可以用来指定字段是否是必须的,如果是必需的,则在找不到合适的实例注入时会抛出异常。
下面我们在App.java中使用上面测试下注解注入:
package cn.outofmemory.
import org.springframework.context.ApplicationC
import org.springframework.context.annotation.AnnotationConfigApplicationC
* Hello world!
public class App
public static void main( String[] args )
ApplicationContext appContext = new AnnotationConfigApplicationContext(&cn.outofmemory.helloannotation&);
CarService service = appContext.getBean(CarService.class);
service.addCar(&宝马&);
在上面的main方法中首先我们初始化了appContext,他是AnnotationConfigApplicationContext,它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得CarService的实例了。
上面的例子非常简单,单纯的使用AnnotationConfigApplicationContext就可以了,但是在实际项目中情况往往没有这么简单,还是需要spring配置文件的。在spring配置文件中也可以通过下面的配置让spring自动扫描注解配置。
&!-- bean annotation driven --&
&context:annotation-config /&
&context:component-scan base-package=&cn.outofmemory.helloannotation& &
&/context:component-scan&
下面我们看下混合使用spring配置和注解的例子,首先在项目中添加source folder,src/main/resources,并添加spring.xml, 其内容如下:
&?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 &&
&!-- bean annotation driven --&
&context:annotation-config /&
&context:component-scan base-package=&cn.outofmemory.helloannotation& &
&/context:component-scan&
&bean id=&sqliteCarDao& class=&cn.outofmemory.helloannotation.CarDao& &
&constructor-arg name=&driver& value=&sqlite&/&
在上面的配置文件中,我们通过context:annotation-config和context:component-sacn节点来指定要扫描注解注入,然后又定义了一个id为sqliteCarDao的bean,它的构造函数的driver值为sqlite。
我们修改下App.java使用xml配置文件,再运行下App看下会怎样。
package cn.outofmemory.
import org.springframework.context.ApplicationC
import org.springframework.context.annotation.AnnotationConfigApplicationC
import org.springframework.context.support.ClassPathXmlApplicationC
* Hello world!
public class App
public static void main( String[] args )
//ApplicationContext appContext = new AnnotationConfigApplicationContext(&cn.outofmemory.helloannotation&);
ApplicationContext appContext = new ClassPathXmlApplicationContext(&/spring.xml&);
CarService service = appContext.getBean(CarService.class);
service.addCar(&宝马&);
运行程序发现输出为:inserting car 宝马 into mysql,显然CarService自动注入的CarDao使用了默认构造函数构造的实例。是否可以通过注解指定使用spring.xml中配置的sqliteCarDao呢?
我们可以修改下CarService类,通过Qualifier注解来指定要使用的bean的名字。
如下,在指定Autowired注解时,同时指定Qualifier注解指定bean的名字
@Autowired
@Qualifier(&sqliteCarDao&)
private CarDao carD
重新运行下App.java 这次输出的是inserting car 宝马 into sqlite,这次使用了spring.xml中配置的bean了。
在文中开头我们还提到了Resouce注解,这个注解可以指定名字注入,我们再次修改下CarService类:
@Resource(name=&sqliteCarDao&)
private CarDao carD
javax.annotation.Resource注解实现的效果和@Autowired+@Qualifier的效果是一样的。
您可能的代码
相关聚客文章
荣誉:2088
相关专栏文章其他回答(3)
你把buildingInfoService打印出来看看。。
public void setBuildingInfoService(BuildingInfoService buildingInfoService) {
this.buildingInfoService = buildingInfoS
if(buildingInfoService==null){
System.out.println("buildingInfoService注入失败");
System.out.println("buildingInfoService注入成功");
控制台输出注入成功,这就说明注入成功
if没有else
是不是没有写构造方法啊。
&&&您需要以后才能回答,未注册用户请先。Spring注解问题,[action中注入service失败,求人帮忙 !谢谢 ]
spring-mvc.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" 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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"&
&!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --&
&context:component-scan base-package="yzyq.controller" /&
&!-- 避免IE执行AJAX时,返回JSON出现下载文件 --&
&bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&
&property name="supportedMediaTypes"&
&value&text/charset=UTF-8&/value&
&/property&
&!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&
&bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&
&property name="messageConverters"&
&ref bean="mappingJacksonHttpMessageConverter" /&&!-- json转换器 --&
&/property&
&!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --&
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" /&
&bean id="multipartResolver" class="org.springframework.monsMultipartResolver"&
&property name="defaultEncoding"&
&value&UTF-8&/value&
&/property&
&property name="maxUploadSize"&
&value&&/value&&!-- 上传文件大小限制为31M,31* --&
&/property&
&property name="maxInMemorySize"&
&value&4096&/value&
&/property&
spring-mybatis.xml
&?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
&!-- JNDI方式配置数据源 --&
&!-- &bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"& &property name="jndiName" value="${jndiName}"&&/property& &/bean& --&
&!-- 配置数据源 --&
&bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"&
&property name="url" value="${jdbc_url}" /&
&property name="username" value="${jdbc_username}" /&
&property name="password" value="${jdbc_password}" /&
&!-- 初始化连接大小 --&
&property name="initialSize" value="0" /&
&!-- 连接池最大使用连接数量 --&
&property name="maxActive" value="20" /&
&!-- 连接池最大空闲 --&
&property name="maxIdle" value="20" /&
&!-- 连接池最小空闲 --&
&property name="minIdle" value="0" /&
&!-- 获取连接最大等待时间 --&
&property name="maxWait" value="60000" /&
&!-- &property name="poolPreparedStatements" value="true" /& &property name="maxPoolPreparedStatementPerConnectionSize" value="33" /& --&
&property name="validationQuery" value="${validationQuery}" /&
&property name="testOnBorrow" value="false" /&
&property name="testOnReturn" value="false" /&
&property name="testWhileIdle" value="true" /&
&!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&
&property name="timeBetweenEvictionRunsMillis" value="60000" /&
&!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&
&property name="minEvictableIdleTimeMillis" value="" /&
&!-- 打开removeAbandoned功能 --&
&property name="removeAbandoned" value="true" /&
&!-- 1800秒,也就是30分钟 --&
&property name="removeAbandonedTimeout" value="1800" /&
&!-- 关闭abanded连接时输出错误日志 --&
&property name="logAbandoned" value="true" /&
&!-- 监控数据库 --&
&!-- &property name="filters" value="stat" /& --&
&property name="filters" value="mergeStat" /&
&!-- 连接属性 --&
&property name="connectionProperties"&
&value&clientEncoding=UTF-8&/value&
&/property&
&!-- myBatis文件 --&
&bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&
&property name="dataSource" ref="dataSource" /&
&!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --&
&property name="mapperLocations" value="classpath:yzyq/mapping/*.xml" /&
&bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"&
&property name="basePackage" value="yzyq.mapper" /&
&property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /&
&!-- 配置事务管理器 --&
&bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&
&property name="dataSource" ref="dataSource" /&
&!-- 注解方式配置事物 --&
&!-- &tx:annotation-driven transaction-manager="transactionManager" /& --&
&!-- 拦截器方式配置事物 --&
&tx:advice id="transactionAdvice" transaction-manager="transactionManager"&
&tx:attributes&
&tx:method name="add*" propagation="REQUIRED" /&
&tx:method name="append*" propagation="REQUIRED" /&
&tx:method name="insert*" propagation="REQUIRED" /&
&tx:method name="save*" propagation="REQUIRED" /&
&tx:method name="update*" propagation="REQUIRED" /&
&tx:method name="modify*" propagation="REQUIRED" /&
&tx:method name="edit*" propagation="REQUIRED" /&
&tx:method name="delete*" propagation="REQUIRED" /&
&tx:method name="remove*" propagation="REQUIRED" /&
&tx:method name="repair" propagation="REQUIRED" /&
&tx:method name="delAndRepair" propagation="REQUIRED" /&
&tx:method name="get*" propagation="SUPPORTS" /&
&tx:method name="find*" propagation="SUPPORTS" /&
&tx:method name="load*" propagation="SUPPORTS" /&
&tx:method name="search*" propagation="SUPPORTS" /&
&tx:method name="datagrid*" propagation="SUPPORTS" /&
&tx:method name="*" propagation="SUPPORTS" /&
&/tx:attributes&
&/tx:advice&
&aop:config&
&aop:pointcut id="transactionPointcut" expression="execution(* yzyq.service..*Impl.*(..))" /&
&aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /&
&/aop:config&
&!-- 配置druid监控spring jdbc --&
&bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"&
&bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"&
&property name="patterns"&
&value&yzyq.service.*&/value&
&/property&
&aop:config&
&aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" /&
&/aop:config&
&/beans& spring.xml
&?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:property-placeholder location="classpath:config.properties" /&
&!-- 自动扫描(自动注入) --&
&context:component-scan base-package="yzyq.service" /&
infoService.java
package yzyq.service.
import java.util.L
import javax.annotation.R
import org.springframework.stereotype.S
import yzyq.model.P
public class InfoServiceImpl implements InfoService{
private InfoMapper infoM
public List&Info& listPageInfo(Page page) {
// TODO Auto-generated method stub
return infoMapper.listPageInfo(page);
public InfoMapper getInfoMapper() {
return infoM
public void setInfoMapper(InfoMapper infoMapper) {
Mapper = infoM
infoController.java
package yzyq.
import java.util.L
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.C
import org.springframework.ui.M
import org.springframework.web.bind.annotation.RequestM
import yzyq.model.P
@Controller
@RequestMapping(value = "/info")
public class InfoController {
@Autowired
private InfoService infoS
@RequestMapping
public String info(Model model, Page page) {
List&Info& infoList = infoService.listPageInfo(page);
model.addAttribute("infoList", infoList);
model.addAttribute("page", page);
return "info";
&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="/xml/ns/javaee" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"&
&display-name&yzyq&/display-name&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring.xml,classpath:spring-mybatis.xml&/param-value&
&/context-param&
&description&字符集过滤器&/description&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&description&字符集编码&/description&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&listener&
&description&spring监听器&/description&
&listener-class&org.springframework.web.servlet.DispatcherServlet&/listener-class&
&/listener&
&listener&
&listener-class&org.springframework.web.util.IntrospectorCleanupListener&/listener-class&
&/listener&
&listener&
&listener-class&yzyq.listener.WebAppContextListener&/listener-class&
&/listener&
&description&spring mvc servlet&/description&
&servlet-name&springMvc&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&description&spring mvc 配置文件&/description&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring-mvc.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&springMvc&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&/login.jsp&/welcome-file&
&/welcome-file-list&
&session-config&
&session-timeout&15&/session-timeout&
&/session-config&
&filter-name&DruidWebStatFilter&/filter-name&
&filter-class&com.alibaba.druid.support.http.WebStatFilter&/filter-class&
&init-param&
&param-name&exclusions&/param-name&
&param-value&/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*&/param-value&
&/init-param&
&filter-mapping&
&filter-name&DruidWebStatFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&servlet-name&DruidStatView&/servlet-name&
&servlet-class&com.alibaba.druid.support.http.StatViewServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&DruidStatView&/servlet-name&
&url-pattern&/druid/*&/url-pattern&
&/servlet-mapping&
&/web-app&
错误信息:
严重: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'infoController': Injection of autowired nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private Service S nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [Service] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:46)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private Service S nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [Service] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
... 50 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [Service] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
... 52 more
四月 08, :43 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /yzyq threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [Service] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:46)
四月 08, :43 下午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
四月 08, :43 下午 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
求各位帮忙解决,感激不尽 。在线坐等
忘记加&context:annotation-config /&了吧?
--- 共有 2 条评论 ---
: 根本没加好吧
已经加了啊,我的spring XML文件再上面啊
是不是web.xml文件里没有配置监听器啊.
&listener&
& & &listener-class&
org.springframework.web.context.ContextLoaderListener
&/listener-class&
& &/listener&
& &context-param&
& & &param-name&contextConfigLocation&/param-name&
& & &param-value&classpath:applicationContext*.xml&/param-value&
& &/context-param&
--- 共有 1 条评论 ---
监听器配置了 在service中都可以注入到dao
但是controller中注入不到service
是你没有添加@service注解 还是没有统一命名,详情可以参考:
--- 共有 2 条评论 ---
: 你是怎么添加的?@Autowired是不能直接添加的,还有就是 你是整个项目都不行还是单单这一个呢
添加了 还是不行
privateInfoMapper infoM
在哪配置了吗?
--- 共有 1 条评论 ---
我也碰到了这个问题,楼主解决了没@
--- 共有 1 条评论 ---
是不是应该把@service去掉?配置文件注入了,还需要使用@service吗?我遇到了这个问题,在写错误报告中。。。
--- 共有 3 条评论 ---
你的QQ有个问题,我回答不上来,加不了好友。能加我么985965
: 可以加下我的qq么,我也遇到这个问题了,,你的我加不上
不是 就是配置文件出错了。
你可以加我QQ 8318683
最近很多朋友加我QQ询问注入失败的问题。注入失败和配置有很大关系,因为在一个springMVC web.xml里有2个全局配置的地方,ContextLoaderListener/DispatcherServlet,如果分别在这2个指定的配置文件中加入了注解扫描功能,而且路径一致并不加排除,则会导致由ContextLoaderListener/DispatcherServlet分别生成的2个XmlWebApplicationContext把通过注解注入的类注入到自己的XmlWebApplicationContext里,由于父子结构关系,可能导致“莫名其妙”的问题。
伤心的布雨,你怎么解决的?我加不了你的QQ。。。

我要回帖

更多关于 spring bean 注解 的文章

 

随机推荐