Spring 注释@spring autowiredd和default-spring autowired一起使用是什么效果

当前访客身份:游客 [
Can&t Wait Any Longer~!
:引用来自“linyfei”的评论不知楼主是否碰到过相...
:不知楼主是否碰到过相同sql在hive client和hives...
:不错,很有用的错误集,果断收藏了!
:引用来自“ht_zhangxd”的评论Hive Editor
:Hive Editor
如果未运行 HiveServer2,应用程...
:楼主总结的很好,bash只是linux上用的比较多,如...
:战略Mark
:总结得够深度,我喜欢,收藏了,谢谢。欢迎继续。
今日访问:9
昨日访问:19
本周访问:414
本月访问:1032
所有访问:66885
Spring +0配置+0注解Autowire Bean对象
发表于4年前( 11:34)&&
阅读(1710)&|&评论()
0人收藏此文章,
说明:我们知道Spring有一个&context:component-scan base-package=&& /&组件用于实现包搜索并加载bean到Spring容器中(参见:)。但是这样一来还是要为每个bean对象标注相应的注解,如&和等(参见:)。
现在的问题是,已经有了一整套的程序,使用Spring-XML的方式配置所有bean,由于bean数量过多,导致配置文件的数量同样很多(超过50个,并在持续增加中),于是想改用component-scan的方式,来自动注册某个包下符合命名规则条件的所有bean,当然,重点是不想对原有代码进行任何修改。不想使用注解去对每一个bean进行标注,从而单纯的组件扫描方式是不可行的。
分析:于是想到了Struts2的Spring插件。
我们知道这个插件有一个奇妙的能力,对于Struts2 Action中引用的bean,只需要有对应的setter方法即可实现对该bean对象的自动注入(如果你使用,你甚至无需写setter方法,只需一个私有变量即可),Spring容器透明的完成了这一点。当然,一切都是在下面一个拦截器中完成的。
Struts2采用Spring生成对象时,默认的对象工厂变成了StrutsSpringObjectFactory,这是一个对SpringObjectFactory进行了简单包装的对象工厂,主要实现还是基于SpringObjectFactory。对象的自动注入依靠的是ActionAutowiringInterceptor这个拦截器,Struts2-Spring-plugin配置文件中首次声明并引用了该拦截器。
Object bean = invocation.getAction();
factory.autoWireBean(bean); 拦截器的
before(ActionInvocation invocation)方法中有上面这两行代码,回调
SpringObjectFactory中的
autoWireBean(Object bean)方法,实现对bean对象的自动注入:(代码见StrutsSpringObjectFactory类)
public Object autoWireBean(Object bean, AutowireCapableBeanFactory autoWiringFactory) {
if (autoWiringFactory != null) {
autoWiringFactory.autowireBeanProperties(bean,
autowireStrategy, false);
injectApplicationContext(bean);
injectInternalBeans(bean);
说了许多,还没有进入正题~
上面说到了Struts2的处理方式,但实际上这里用不上。在参考了“”系列文章后明白了Spring初始、以及实例化bean的过程(流程图如下),推荐查看原文。
因此,基本得出了本文的一个解决方案。
实现:由于项目中良好的命名习惯,所有服务接口的名称均是以“Service”结尾,实现类则是“*ServiceImpl”,而所有对实现类的引用均是以服务名首字母小写的非限定类名的形式,即AbcService - AbcServiceImpl - abcService的对应关系。于是要把所有实现类注册为bean,要做的就很明确了。
1.首先需要一个BeanNameGenerator,并注册到组件扫描器中,以为bean类重命名。代码如下:
import org.springframework.beans.factory.config.BeanD
import org.springframework.beans.factory.support.BeanDefinitionR
import org.springframework.beans.factory.support.BeanNameG
public class MyBeanNameGenerator implements BeanNameGenerator {
public String generateBeanName(BeanDefinition bd, BeanDefinitionRegistry bdr) {
String classFullName = bd.getBeanClassName();
String beanName = classFullName.substring(classFullName.lastIndexOf(&.&) + 1);
beanName = String.valueOf(beanName.charAt(0)).toLowerCase() + beanName.substring(1);
int end = beanName.lastIndexOf(&Impl&);
if (end & 0)
beanName = beanName.substring(0, end);
return beanN
2.按照上图的理解,你可以知道一个BeanPostProcessor的实现类在bean对象的实例化过程中有何作用。实际上就是一层接口,用于在Spring实例化bean的前后执行一些附加的自定义动作。简单到输出一行debug信息,复杂可以重定义整个bean,至于是前置方法还是后置方法区别不大。具体栗子如下:
public class MyBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware {
private ApplicationC
public Object postProcessAfterInitialization(Object bean, String arg1) throws BeansException {
if (null != bean && bean.getClass().getName().endsWith(&Impl&)) {
BeanInfo bi = Introspector.getBeanInfo(bean.getClass());
for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {
String beanName = pd.getName();
Method m = pd.getWriteMethod();
if ((!&class&.equals(beanName)) && this.ac.containsBean(beanName) && null != m
&& Modifier.isPublic(m.getModifiers()) && m.getParameterTypes().length == 1) {
Object param = this.ac.getBean(beanName);
if (m.getParameterTypes()[0].isInstance(param))
m.invoke(bean, param);
} catch (Exception e) {
e.printStackTrace();
} catch (IntrospectionException e1) {
e1.printStackTrace();
ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
public void doWith(Field f) throws IllegalArgumentException, IllegalAccessException {
if (!f.isAccessible())
f.setAccessible(true);
Object param = MyBeanPostProcessor.this.ac.getBean(f.getName());
if (f.get(bean) == null && f.getType().isInstance(param))
f.set(bean, param);
}, new FieldFilter() {
public boolean matches(Field f) {
// 只处理private(not static or final)参数不要求为interface
if (Modifier.isPrivate(f.getModifiers()) && !Modifier.isFinal(f.getModifiers())
&& !Modifier.isStatic(f.getModifiers()) && ac.containsBean(f.getName()))
public Object postProcessBeforeInitialization(final Object arg0, String arg1) throws BeansException {
return arg0;
public void setApplicationContext(ApplicationContext ac) throws BeansException {
上面的代码实现了对bean中引用的其他bean对象的自动注入,根据项目中已经使用的规则,凡是有setter方法、且属性名可以在Spring容器中找到对应名字的bean的属性均会被自动注入(私有、非static及final的属性,属性类型可以是接口亦可以是普通类)。此外,更支持对私有字段(没有公共setter方法)的赋值注入(利用Java反射特性)。
3.最后,只需在Spring配置文件中加上简单的几行:
&bean class=&test.MyBeanPostProcessor& /&
&context:component-scan base-package=&test.beans&
name-generator=&test.MyBeanNameGenerator&
use-default-filters=&false& annotation-config=&false&&
&context:include-filter type=&regex& expression=&.*Impl& /&
&/context:component-scan&
&然后就可以把之前在配置文件中的绝大部分bean定义给删除了(除了部分需要特殊定义的、或是DataSource等bean对象)。上面的配置中,其中name-generator就是指定命名器的选项,另外,关于annotation-config这个参数,我们知道还有一个类似的配置项:&context:annotation-config /&,这个参数则是指定可被扫描到的bean都可以使用annotation配置(即文首所说的autowire注解等),默认是为true,即默认启用。
4.what's more,设置annotation-config会同时引用进其他几个BeanPostProcessor,参见:。这就造成一个 BeanPostProcessor的执行顺序和默认覆盖问题。参考AbstractApplicationContext类的invokeBeanFactoryPostProcessors和registerBeanPostProcessors方法,其中有关于order顺序的特殊处理。因为系统定义的BeanPostProcessor实现类都有同时实现了order接口,因此会以一定的顺序执行(具体顺序以OrderComparator类的sort方法执行结果为准),对于没有实现order接口或自定义的BeanPostProcessor实现类,都将在最后执行,此外,也受到Spring配置文件中的配置顺序的影响。关于默认覆盖问题,则同样以配置文件为准。
至此,本文方休。
EOF ? 最后再总结一下本文讲了些什么,好吧,我不想把开头重复一遍,所以我讲一个小插曲:让我们回到MyBeanPostProcessor类中,有一行这样的代码使用JDK的标准bean定义解析器来解析bean对象的get/set方法,
BeanInfo bi = Introspector.getBeanInfo(bean.getClass());
for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {...
然而属性包装器(PropertyDescriptor)似乎是有一个bug(找了很多bean定义都没有关于此的特殊说明)。譬如,对于首字母是小写而次字母是大写的属性(如aBc),则其setter方法是setABc,对这个setter方法进行反向解析时得到的属性名确是ABc,即对应关系成了aBc - setAbc - ABc
-_- &~很奇妙吧~这样注入对象时就会在Spring容器中找不到对应名字的bean。
Finaly.本文还参考了以下链接中的内容:
系列文章,
Spring英文档中关于BeanPostProcessor的部分:
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
而且还要在配置文件中加入定义。例:CLASS& &public class&&SimpleMyServiceImpl implements SimpleMyService {& & &&private UserInfoDao userInfoD&& & &public void setUserInfoDao(&UserInfoDao&&userInfoDao&) {& & & & &this.&&userInfoDao&=&&&userInfoDao&;& & & }& & &public&UserInfo&findUserInfo(String userId) {& & & & UserInfo info =&&usrInfoDao.findUserInfo(userId);& & & && & }}配置文件& &bean id="myService" class="com.sample.service.SimpleMyServiceImpl"&& & &property name="userInfoDao"&&ref bean="userInfoDao" /&&/property&& &/bean&如果使用@Autowired或@Resource,就不用写get 和 set方法,也不用配置文件了。&&public class&&SimpleMyServiceImpl implements SimpleMyService {& & &&@Autowired& & & private UserInfoDao userInfoD&& & &public&UserInfo&findUserInfo(String userId) {& & & & UserInfo info =&&usrInfoDao.findUserInfo(userId);& & & && & }}下面来详细了解一下@Autowired以及与其相似的@Resource1,@Autowired是Spring的方法。& &&@Resource是Java(JSR-250)的方法。2,@Autowired:类型一致注入& & & &@Autowired(required=false)& & & &private UserInfoDao userInfoD& & & & &UserInfoDao类型的class有的情况下,就自动注入(设定)&& & & & &UserInfoDao类型的class没有的情况下,不自动注入(设定),也不产生error.& & &&&@Autowired(required=true)& & & &private UserInfoDao userInfoD& & & & &UserInfoDao类型的class有的情况下,就自动注入(设定)&& & & & &UserInfoDao类型的class没有的情况下,不自动注入(设定),产生error.& & & & &required选项默认是TURE& &@Resource:名称一致注入& & & &&@Resource(name="userInfoDao")& & & &&private UserInfoDao userInfoD& & & &用名称是userInfoDao的类来注入。& & & &&@Resource& & & &&private UserInfoDao userInfoD& & & &用和变量名userInfoDao一致的类来注入。这里会有一个问题,在使用类型对应的@Autowired的时候,可能会有多个候选项的情况,怎么办呢?答案是用@Qualifier来指定候选项的ID。& & & &@Autowired& & & &@Qualifier("main")& & & &private UserInfoDao userInfoD3,修饰的范围不同。& &@Autowired:属性,方法,构造函数加在任意名,多个参数的方法上。public class MovieRecommender {
private MovieCatalog movieC
private CustomerPreferenceDao customerPreferenceD
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieC
this.customerPreferenceDao = customerPreferenceD
}加在属性和构造函数上。public class MovieRecommender {
@Autowired
private MovieCatalog movieC
private CustomerPreferenceDao customerPreferenceD
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceD
}& &@Resource:属性,只有一个参数的Bean的setter方法public class SimpleMovieLister {
private MovieFinder movieF
@Resource(name="myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieF
}&public class MovieRecommender {
private CustomerPreferenceDao customerPreferenceD
private ApplicationC
public MovieRecommender() {
如果想用名称来实现Spring注释的注入的话,@Resource比@Autowired更好。还有Collection和Map不能用@Autowired来实现注入,可以用@Resource。
// @Autowired @Qualifier("prefsList") は NG
@Resource(name = "prefsList")
private List&String&
1、@Autowired 注解:首先在使用时候需要引入配置:&!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --&
&bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/&在Spring MVC 中 由于配置了“ &servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&” 故不使用引入上面自动注入也可实现指定注入功能。
@Autowired
可以标注在属性,以及set方法上,以及构造函数上.进行标注,然后自动完成注入。
2、@Qualifier 注解:
如果配置了多个类型为 User 的 Bean, 那么我们在1234@Autowiredprivate User setUser(User user){//....} 会出现错误,这个时候我们就需要对注入的对象指定读取Bean的名称,则所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。12345678910@Autowiredprivate User setUser(@Qualifier("user1") User user){//....}
public class Recommender {
@Autowired
@Qualifier("main")
private MovieC}@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。
3、@Required注解:@Required注解检查 但他只检查属性是否已经设置而不会测试属性是否非空 4、@Resource 写在属性或者是setter方法上,按照名称注入 可以配置name="...",
如果不配置则提取 setter方法名,该bean必须存在。@Resource(name="user")
5、@Component,@Service,@Controller,@Repository 注解:Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。6、@PostConstruct
注解,标识Bean在初始化的时候执行,@PreDestroy
注解,表示在Bean在对象销毁的时候执行。123456789@PostConstructpublic void init() { } @PreDestroypublic void destory() { }7、@Scope 注解 设置作用域:prototype,singleton 注意spring2.0后 又增加了request ,session和global session 4个作用区域分享到:
阅读(2699)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Spring注释@Autowired @Resource @Qualifier @Required @Resource @Component,@Service,@Controller,@Repository @PostConstruct,@PreDestroy',
blogAbstract:'在用spring的时候:在spring中注入的bean 都建议定义成private变量,并且要写上 get 和 set方法。而且还要在配置文件中加入定义。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}请教:Spring @Autowired注解实现了接口的成员变量时失败
[问题点数:100分,结帖人yu1ei]
请教:Spring @Autowired注解实现了接口的成员变量时失败
[问题点数:100分,结帖人yu1ei]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2011年3月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。autowire异常的三个情况 - zhongzhihua - ITeye技术网站
博客分类:
16:06:00 net.sf.ehcache.config.ConfigurationFactory parseConfiguration
警告: No configuration found. Configuring ehcache from ehcache-failsafe.xml
found in the classpath: jar:file:/E:/kenny/%e9%a1%b9%e7%9b%ae/shops/webapp/WEB-INF/lib/ehcache-1.6.1.jar!/ehcache-failsafe.xml
16:06:02,734 [main] ERROR [org.springframework.test.context.TestContextManager] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1292d12] to prepare test instance [com.zzh.entity.product.BrandServiceImplTest@4e32c8]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.zzh.entity.product.BrandServiceImplTest': Autowir nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.service.product.impl.BrandServiceImpl com.zzh.entity.product.BrandServiceImplTest.brandServiceI nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandServiceImpl': Autowir nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.dao.product.BrandDao com.zzh.service.product.impl.BrandServiceImpl.brandD nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.zzh.dao.product.BrandDao] is defined: Unsatisfied dependency of type [class com.zzh.dao.product.BrandDao]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:329)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:255)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:111)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:148)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.service.product.impl.BrandServiceImpl com.zzh.entity.product.BrandServiceImplTest.brandServiceI nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandServiceImpl': Autowir nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.dao.product.BrandDao com.zzh.service.product.impl.BrandServiceImpl.brandD nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.zzh.dao.product.BrandDao] is defined: Unsatisfied dependency of type [class com.zzh.dao.product.BrandDao]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435)
at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240)
... 19 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandServiceImpl': Autowir nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.dao.product.BrandDao com.zzh.service.product.impl.BrandServiceImpl.brandD nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.zzh.dao.product.BrandDao] is defined: Unsatisfied dependency of type [class com.zzh.dao.product.BrandDao]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
... 21 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zzh.dao.product.BrandDao com.zzh.service.product.impl.BrandServiceImpl.brandD nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.zzh.dao.product.BrandDao] is defined: Unsatisfied dependency of type [class com.zzh.dao.product.BrandDao]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435)
at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240)
... 34 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.zzh.dao.product.BrandDao] is defined: Unsatisfied dependency of type [class com.zzh.dao.product.BrandDao]: expected at least 1 matching bean
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
... 36 more
autowire异常主要由三个情况发生的
像上面的情况是BrandDao没有注入,
1。你的BrandServiceImpl必须以@Service或@Component注解才行。
2。自动写入的时候把接口写成实现类了
@Autowired
private BrandServiceImpl
brandServiceI
@Autowired
private BrandService
3.在BrandDao 类上加上@Repository注解
浏览 49972
zhongzhihua
浏览: 136028 次
@Servicepublic class RacePlanDa ...
帮了大忙了,用第三种方法解决了
大神能够解决这个问题不呢?http://zhidao.baid ...
不知是否与jdk的版本有关,但在jdk1.6里,3.对变量值进 ...
特意登录来感谢,困扰了一天

我要回帖

更多关于 spring autowired配置 的文章

 

随机推荐