使用@Autowired註解引入server服務層方法時報錯的解決
@Autowired註解引入server服務層方法時報錯
contentTypeService in com.example.demo001.controller.ContentTypeController required a bean of type ‘com.example.demo001.service.ContentTypeService’ that could not be found
網上搜的方法:還行
方式一:@Autowried(required = false)設置required屬性值為false,錯誤消失
方式二:用@Resource註解替換@Autowried註解,錯誤消失
JavaBean是特殊的Java類、使用Java語言書寫,並且遵守JavaBean API規范。JavaBean與其他Java類相比而言獨一無二的特征是:
1、提供一個默認的無參構造函數。
2、需要序列化並且實現瞭Serializable接口,
3、可能有一系列可讀性屬性,
4、可能有一系列的getter或setter方法。
JavaBean屬性
一個JavaBean對象的屬性應該是可訪問的,這個屬性可以是任意合法的Java數據類型,包括自定義Java類。
一個JavaBean對象的屬性可以是可讀寫,或隻讀,或隻寫。JavaBean對象的屬性通過JavaBean實現類中提供的兩個方法來訪問
方法
getPropertyName()
:舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也被稱為訪問器。setPropertyName()
:舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也被稱為寫入器。
一個隻讀的屬性隻提供getPropertyName()方法,一個隻寫的屬性隻提供setPropertyName()方法。
@Autowried的作用是什麼?
@Autowried是一個註釋,它可以對類成員變量、方法及構造函數進行標註、讓spring完成bean自動裝配的工作。
@Autowried默認是按照類去匹配,配合@Qualifier指定按照名稱去裝配bean
錯誤真正原因是在serveImpl中並未導入
問題得到解決,附上網上解決問題的網址,以上哪兩種方法也能用暫不清楚是怎麼回事
隻是導讀
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>
上述是原始的xml文件,如果此時的 <bean id=” ” class=” “></bean>就相當於註釋的 @Component而 @Service是@Component衍生,而autowire在xml是bean的屬性,所以隻有@Component存在@Autowire才有效
<!-- byName會自動再容器上下文中查找,何自己對象set方法後面的值是對立的beanid --> <!-- byType必須保證類型全局唯一會自動再容器上下文中查找,和自己對象set方法後面的值是對立的bean --> <bean id="people" class="com.chen.pojo.People" autowire="byType"> <property name="name" value="天明"></property> <property name="dog" ref="dog"></property> <property name="cat" ref="cat"></property> </bean>
關於@Autowired 註解時發生的錯誤
1. Field injetion is not recommended
2. spring boot自動註入出現Consider defining a bean of type ‘xxx’ in your configuration問題
1.解決
原來代碼
@Autowired private final AccountDao accountDao;
報錯:Field injetion is not recommended
改為
//final 非必要 private final AccountDao accountDao; @Autowired public AccountController(AccountDao accountDao) { this.accountDao = accountDao; }
錯誤消失
註:還是警告的話,直接將@Autowired註解改為@Resource註解可以消除警告(不影響註入)
2.解決
原來將account 也就是entity 和dao 放在瞭controller的上層目錄裡
報錯:Consider defining a bean of type ‘xxx’ in your configuration
把entity和dao放在controler同級目錄或者我放在瞭同級目錄所在account包裡
如下圖所示
重新啟動,錯誤消失~
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet.
推薦閱讀:
- SpringBoot對不同Bean註解的區別和使用場景說明
- Spring Bean自動裝配入門到精通
- 基於@Autowierd(自動裝配)的使用說明
- 深入分析@Resource和@Autowired註解區別
- 一篇文章教帶你瞭解Java Spring之自動裝配