1. 程式人生 > >Spring中用@Component、@Repository、@Service和 @Controller等標註的預設Bean名稱會是小寫開頭的非限定類名

Spring中用@Component、@Repository、@Service和 @Controller等標註的預設Bean名稱會是小寫開頭的非限定類名

今天用排程平臺去呼叫bean中的方法時,提示找不到bean。經查,發現是由於如果在標註上沒有提供name屬性值,則預設的bean名稱是小寫開頭的,而不是大寫開頭的。

下面是其他文件參閱:

使用過濾器自定義掃描 <context:component-scan base-package="org.example">
spring開發手冊中這樣寫:
3.12.4. 自動檢測元件的命名

當一個元件在某個掃描過程中被自動檢測到時,會根據那個掃描器的BeanNameGenerator 策略生成它的bean名稱。預設情況下,任何包含 name值的Spring“典型”註解 (@Component、@Repository、 @Service和@Controller) 會把那個名字 提供給相關的bean定義。如果這個註解不包含name值或是其他檢測到的元件 (比如被自定義過濾器發現的),預設bean名稱生成器會返回小寫開頭的非限定(non-qualified)類名。 例如,如果發現了下面這兩個元件,它們的名字會是‘myMovieLister‘和‘movieFinderImpl‘:

@Service("myMovieLister")
public class SimpleMovieLister {
    // ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
    // ...
}