@Autowired 注释
对类成员变量、方法及构造函数进行标注,完成自动装配的工作
在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。
当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个
匹配的 Bean.
当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用
@Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错
@Qualifier 注释
我们在 Spring 容器中配置了两个类型相同的Bean时,当对 bean的成员变量进行自动注入时,
Spring 容器将无法确定到底要用哪一个Bean,用@Qualifier 注释可以指定具体的bean
@Qualifier("bean名") ; @Autowired 和 @Qualifier 结合使用时,
自动注入的策略就从 byType 转变成 byName 了。@Autowired 可以对成员变量、方法以及构造函数
进行注释,而@Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,
所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。
@Resource注释
@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,
而 @Resource 默认按 byName 自动注入罢了。
@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为
Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入
策略, 而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将
通过反射机制使用 byName 自动注入策略。
@PostConstruct注释
标注的方法在类实例化后调用
@PreDestro注释
标注的方法将在类销毁之前调用
@Component注释
将一个类定义了Spring 容器中的Bean
@Component 有一个可选的入参,用于指定 Bean 的名称
一般情况下,Bean 都是 singleton 的,需要注入Bean的地方仅需要通过byType
策略就可以自动注入了,所以大可不必指定Bean的名称
@Repository注释
和@Component 是等效的,命名上看来是持久层
@Service注释
和@Component 是等效的,命名上看来是业务层
@Controller注释
和@Component 是等效的,命名上看来是控制层