目录
简洁的Spring读取和存储对象方式
存储Bean对象
相较于通过创建上下文,获取上下文后将bean对象存储到Spring容器这种方式,使用注解更加方便.
前置工作——配置扫描路径
在使用注解前,我们需要配置扫描待添加注解的文件位置.
存储Bean对象的注解
将bean对象存储到Spring中的注解可以分为两种类型
- 类注解:@Controller,@Service,@Repository,@Component,@Configuration
- 方法注解:@Bean
类注解
@Controller:控制器存储
@Service:服务存储
@Repository:仓库存储
@Component:组建存储
@Configuration
从上述的使用过程中可以看到每一个注解的使用方式都是类似的.但为什么还需要这么多的注解呢? 为了让程序员能够更直观地了解每一个类的用途
程序的工程分层如下:
通过图可以看到@Configuration是负责配置文件的控制,@Controller是负责验证前端传来的参数,@Service是负责处理前端传来的参数,@Repository是负责存储前端传来的参数,并和数据库进行交互.而@Component则负责一些工具类.
在这五种类注解中,@Component是其他所有注解的父类.
方法注解
方法注解@Bean,顾名思义涵盖的对象是一个具体的方法.但单纯使用@Bean是无法将bean对象存储到Spring中的,需要搭配类注解共同使用
在使用@Bean时,我们可以设置name属性给bean对象重命名
读取Bean对象
属性注入——Autowired
利用@Autowired注解将对象以属性的形式注入
构造方法注入
利用@Autowired将对象以构造方法的形式注入
Setter注入
利用@Autowired将对象以Setter形式注入
三种注入方式的对比
- 属性注入最简洁,使用方便.缺点是只适用于IoC容器,对于非IoC容器,在运行时会报空指针异常.
- 构造方法注入:Spring最推荐的一种注入方式,通用性强,在使用前保证注入的类不为空.缺点是当存在多个注入时会造成构造方法的臃肿
- Setter方法注入:Spring早期推荐的一种注入方式.在通用性方面不如构造方法
Autowired和Resources的区别
在进行类注入时,除了@Autowired以外,还有了另外一种注解@Resources.
二者的区别
- Autowired来自于Spring,Resources来自于jdk
- Autowired注解几乎不支持参数设置,而Resources支持更多的参数设置.这也意味着当一个类中使用多个@Bean存储同一个类对象时,在另一个类中如果只使用@Autowired会报错.解决方式是用@Resources注解搭配参数name属性去指定注入的对象.也可以使用@Qualifier去弥补@Autowired注解参数的问题:利用@Qualifier注解定义类的名称