今日目标

三、Spring注解开发

1 注解开发定义Bean对象【重点】

目的:xml配置Bean对象有些繁琐,使用注解简化Bean对象的定义

问题导入

问题1:使用什么标签进行Spring注解包扫描?

问题2:@Component注解和@Controller、@Service、@Repository三个衍生注解有什么区别?

1.1 基本使用

【第一步】在applicationContext.xml中开启Spring注解包扫描

【第二步】在类上使用@Component注解定义Bean。

补充说明:如果@Component注解没有使用参数指定Bean的名称,那么类名首字母小写就是Bean在IOC容器中的默认名称。例如:BookServiceImpl对象在IOC容器中的名称是bookServiceImpl。

【第三步】在测试类中获取Bean对象

注意:在测试类中不要调用bookService的save方法,因为还没有给BookServiceImpl中的bookDao赋值,调用bookService的save方法会出现空指针异常。

运行结果

image-20210730104835746

1.2 @Component三个衍生注解

说明:加粗的注解为常用注解

 

2 纯注解开发模式【重点】

问题导入

问题1:配置类上使用什么注解表示该类是一个配置类?

问题2:配置类上使用什么注解进行Spring注解包扫描?

2.1 纯注解开发模式介绍

image-20210803192052811

2.2 代码演示

【第一步】定义配置类代替配置文件

【第二步】在测试类中加载配置类,获取Bean对象并使用

 

3 注解开发Bean作用范围和生命周期管理

问题导入

在类上使用什么注解定义Bean的作用范围?

3.1 bean作用范围注解配置

3.2 bean生命周期注解配置

==注意:@PostConstruct和@PreDestroy注解是jdk中提供的注解,从jdk9开始,jdk中的javax.annotation包被移除了,也就是说这两个注解就用不了了,可以额外导入一下依赖解决这个问题。==

 

4 注解开发依赖注入【重点】

问题导入

问题1:请描述@Autowired注解是如何进行自动装配的?

问题2:请描述@Qualifier注解的作用

4.1 使用@Autowired注解开启自动装配模式(按类型)

说明:不管是使用配置文件还是配置类,都必须进行对应的Spring注解包扫描才可以使用。@Autowired默认按照类型自动装配,如果IOC容器中同类的Bean有多个,那么默认按照变量名和Bean的名称匹配,建议使用@Qualifier注解指定要装配的bean名称

==注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法。==

4.2 使用@Qualifier注解指定要装配的bean名称

目的:解决IOC容器中同类型Bean有多个装配哪一个的问题

==注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用==

4.3 使用@Value实现简单类型注入

以上@Value注解中使用${name}从属性文件中读取name值,那么就需要在配置类或者配置文件中加载属性文件。

==注意:@PropertySource()中加载多文件请使用数组格式配置,不允许使用通配符*==

 

5 注解开发管理第三方Bean【重点】

问题导入

导入自己定义的配置类有几种方式?

【第一步】单独定义配置类

【第二步】将独立的配置类加入核心配置

方式1:@Import注解导入式
方式2:@ComponentScan扫描式

 

6 注解开发为第三方Bean注入资源【重点】

问题导入

配置类中如何注入简单类型数据,如何注入引用类型数据?

6.1 简单类型依赖注入

说明:如果@Value()中使用了EL表达式读取properties属性文件中的内容,那么就需要加载properties属性文件。

6.2 引用类型依赖注入

说明:引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

 

7 注解开发总结

image-20210730113548708