Spring的注解
声明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只能有一个。