posts - 167,  comments - 30,  trackbacks - 0
          Spring2.5繼續(xù)堅持了這個發(fā)展趨向,特別是為那些使用Java 5或更新版本java的開發(fā)人員提供了進(jìn)一步簡化而強(qiáng)大的新特性。這些新特性包括:注解驅(qū)動的依賴性注入(annotation-driven dependency injection),使用注解而非XML元數(shù)據(jù)來自動偵測classpath上的Spring組件,注解對生命周期方法的支持,一個新的web控制器模型將請求映射到加注解的方法上,在測試框架中支持Junit4,Spring XML命名空間的新增內(nèi)容,等等。
          項(xiàng)目中使用的spring2.5版本。如果想要使用spring提供的注解功能.
          applicationContext.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-2.5.xsd 
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.5.xsd">
          <!-- Using annontations -->
          <context:annotation-config></context:annotation-config>
          新增以下三項(xiàng)才可以使用注解功能
          xmlns:context="http://www.springframework.org/schema/context"
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.5.xsd">
          <context:annotation-config></context:annotation-config>
          或者<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 注冊一個單獨(dú)的Spring post-processor.
          一個沒有實(shí)現(xiàn)任何接口的業(yè)務(wù)類,配置如下:
          public class LogService extends Service{
          public LogBiz(){}
          @Resource //默認(rèn)按名稱查找bean. 如果找不到,則按類型匹配bean.
          private BaseDao dao;
          }
          tomcat啟動錯誤1:
          Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logBiz': Injection of resource fields failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.ccms.base.dao.BaseDAO] is defined: expected single matching bean but found 40: [baseDAO, loginDAO, logDAO]
          at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:291)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:876)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
          at java.security.AccessController.doPrivileged(Native Method)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
          at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
          at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
          at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
          ... 32 more
          Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.ccms.base.dao.BaseDAO] is defined: expected single matching bean but found 40: [baseDAO, loginDAO, logDAO]
          at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:583)
          at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:418)
          at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:497)
          at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:145)
          at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:79)
          at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:288)
          ... 42 more
          使用@Resource默認(rèn)按名稱查找bean. 如果找不到,則按類型匹配bean.而名稱dao沒有找到,所以會根據(jù)BaseDAO匹配,但是BaseDAO是一個接口:
          <bean id="loginDAO" class="com.test.dao.loginDAO" parent="baseDAO" />
          <bean id="logDAO" class="com.test.dao.logDAO" parent="baseDAO" />
          <bean id="baseDAO" class="com.ccms.base.dao.BaseDAOImpl">
          <property name="sessionFactory">
          <ref bean="sessionFactory" />
          </property>
          <property name="simpleJdbcTemplate">
          <ref bean="simpleJdbcTemplate" />
          </property>
          </bean>
          有兩個實(shí)現(xiàn)了BaseDAO接口的類,所以spring就不知道應(yīng)該使用哪一個了。直接拋出異常。
          解決方法1:
          我們可以看到baseDAO名稱是唯一的, 所以如果想要按照名稱匹配,則直接寫baseDAO就可以了
          @Resource
          private BaseDAO baseDAO;
          解決方法2:
          @Autowired //默認(rèn)按照類型匹配,同樣應(yīng)為有兩個子類bean,所以拋出異常。
          @Qualifier("loginDAO") //限定bean
          private BaseDAO dao;
          參考博客:
          http://doc.chinaunix.net/java/200801/240056.shtml
          http://stackoverflow.com/questions/10534053/autowiring-two-beans-implementing-same-interface-how-to-set-default-bean-to-au
          posted on 2013-03-21 10:22 David1228 閱讀(2494) 評論(0)  編輯  收藏 所屬分類: Spring

          <2013年3月>
          242526272812
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關(guān)

          Spring相關(guān)

          云計算/Linux/虛擬化技術(shù)/

          友情博客

          多線程并發(fā)編程

          開源技術(shù)

          持久層技術(shù)相關(guān)

          搜索

          •  

          積分與排名

          • 積分 - 358877
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 蚌埠市| 手游| 廉江市| 永和县| 博白县| 琼结县| 水城县| 剑阁县| 樟树市| 龙口市| 肇州县| 海兴县| 手游| 富民县| 连城县| 夏津县| 博客| 确山县| 若羌县| 四会市| 积石山| 中方县| 嘉定区| 长顺县| 额尔古纳市| 秦安县| 库伦旗| 翼城县| 上高县| 确山县| 凯里市| 镇原县| 伊宁市| 锡林郭勒盟| 虞城县| 义乌市| 于都县| 呼伦贝尔市| 吴江市| 城固县| 辰溪县|