聲明Bean的注解
?@Component
?@Controller
?@Service
?@Repository
后三種為@Component的別名,之所以不同是因為可讀性的考慮
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {@AliasFor(//別名annotation = Component.class)String value() default "";
}
他們都是只有一個value屬性。value屬性用來指定bean的id,也就是bean的名字。
如果把value屬性徹底去掉,spring會被Bean自動取名嗎?會的。并且默認名字的規律是:Bean類名首字母小寫即可。
負責注入的注解
@Value
當屬性的類型是簡單類型時,可以使用@Value注解進行注入。
@Autowired
注解可以用來注入非簡單類型。被翻譯為:自動連線的,或者自動裝配。
單獨使用@Autowired注解,默認根據類型裝配。【默認是byType】?如果想根據名稱裝配,需要配合@Qualifier注解一起用。
@Autowired可以放在
o構造方法上
o方法上 set方法
o形參上
o屬性上
o注解上
@Autowired注解和@Qualifier注解聯合起來才可以根據名稱進行裝配,在@Qualifier注解中指定Bean名稱。
@Autowired@Qualifier("userDaoForOracle") // 這個是bean的名字。public void setUserDao(UserDao userDao) {this.userDao = userDao;}
@Qualifier的使用
一,默認是Bean Name
每個被 @Component, @Service 等注解的類,Spring 都會將其注冊為一個 Bean,并默認使用類名首字母小寫作為其 Bean Name(標識符)
@Resource
@Resource注解是JDK擴展包中的!!
可出現在類,屬性,方法
<dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId><version>2.1.1</version>
</dependency>
@Resource注解:默認byName注入,沒有指定name時把屬性名當做name,根據name找不到時,才會byType注入。byType注入時,某種類型的Bean只能有一個。