学习Spring框架day02

1、案例:数据源对象管理
在这一节中,我们将通过一个案例来学习下对于第三方bean该如何进行配置管理。
以后我们会用到很多第三方的bean,本次案例将使用咱们前面提到过的数据源Druid(德鲁伊)和C3P0
来配置学习下。
需求:使用Spring的IOC容器来管理Druid连接池对象
1.使用第三方的技术,需要在pom.xml添加依赖
2.在配置文件中将【第三方的类】制作成一个bean,让IOC容器进行管理
3.数据库连接需要基础的四要素驱动、连接、用户名和密码,【如何注入】到对应的bean中
4.从IOC容器中获取对应的bean对象,将其打印到控制台查看结果
实现Druid管理
步骤1:导入druid的依赖
步骤2:配置第三方bean
步骤3:从IOC容器中获取对应的bean对象
步骤4:运行程序
2、实现C3P0管理
步骤1:导入C3P0的依赖
步骤2:配置第三方bean
在applicationContext.xml配置文件中添加配置
注意:
ComboPooledDataSource的属性是通过setter方式进行注入
想注入属性就需要在ComboPooledDataSource类或其上层类中有提供属性对应的setter方法
C3P0的四个属性和Druid的四个属性是不一样的
步骤3:运行程序
3、第三方bean属性优化
1、实现思路
需求:将数据库连接四要素提取到properties配置文件,spring来加载配置信息并使用这些信息
来完成属性注入。
1.在resources下创建一个jdbc.properties(文件的名称可以任意)
2.将数据库连接四要素配置到配置文件中
3.在Spring的配置文件中加载properties文件
4.使用加载到的值实现属性注入
其中第3,4步骤是需要大家重点关注,具体是如何实现
4、读取单个属性
实现思路
对于上面的案例,效果不是很明显,我们可以换个案例来演示下:
需求:从properties配置文件中读取key为name的值,并将其注入到BookDao中并在save方法中
进行打印。
1.在项目中添加BookDao和BookDaoImpl类
2.为BookDaoImpl添加一个name属性并提供setter方法
3.在jdbc.properties中添加数据注入到bookDao中打印方便查询结果
4.在applicationContext.xml添加配置完成配置文件加载、属性注入(${key})
5、加载properties文件小结
本节主要讲解的是properties配置文件的加载,需要掌握的内容有
如何开启context命名空间
如何加载properties配置文件
如何在applicationContext.xml引入properties配置文件中的值
6、核心容器
这里所说的核心容器,大家可以把它简单的理解为ApplicationContext,前面虽然已经用到过,但
是并没有系统的学习,接下来咱们从以下几个问题入手来学习下容器的相关知识:
如何创建容器?
创建好容器后,如何从容器中获取bean对象?
容器类的层次结构是什么?
BeanFactory是什么?
7、容器的创建方式
案例中创建ApplicationContext的方式为:

这种方式翻译为:类路径下的XML配置文件
除了上面这种方式,Spring还提供了另外一种创建方式为:

这种方式翻译为:文件系统下的XML配置文件
使用这种方式,运行,会出现如下错误:

说明:大家练习的时候,写自己的具体路径。
这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。
8、Bean的三种获取方式
方式一,就是目前案例中获取的方式
方式二:
方式三:
9、容器类层次结构
(1)在IDEA中双击shift ,输入BeanFactory
(2)点击进入BeanFactory类,ctrl+h,就能查看到如下结构的层次关系
从图中可以看出,容器类也是从无到有根据需要一层层叠加上来的,大家重点理解下这种设计思想。
10、BeanFactory的使用
如果不去获取bean对象,打印会发现:
BeanFactory是延迟加载,只有在获取bean对象的时候才会去创建
ApplicationContext是立即加载,容器加载的时候就会创建bean对象
ApplicationContext要想成为延迟加载,只需要按照如下方式进行配置
小结
这一节中所讲的知识点包括:
容器创建的两种方式
ClassPathXmlApplicationContext[掌握]
FileSystemXmlApplicationContext[知道即可]
获取Bean的三种方式
getBean(“名称”):需要类型转换
getBean(“名称”,类型.class):多了一个参数
getBean(类型.class):容器中不能有多个该类的bean对象
上述三种方式,各有各的优缺点,用哪个都可以。
容器类层次结构
只需要知晓容器的最上级的父接口为 BeanFactory即可
BeanFactory
使用BeanFactory创建的容器是延迟加载
使用ApplicationContext创建的容器是立即加载
具体BeanFactory如何创建只需要了解即可。
11、核心容器总结
容器相关
BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
ApplicationContext接口常用初始化类
ClassPathXmlApplicationContext(常用)
FileSystemXmlApplicationContext
bean相关
其实整个配置中最常用的就两个属性id和class。
把scope、init-method、destroy-method框起来的原因是,后面注解在讲解的时候还会用到,
所以大家对这三个属性关注下。
12、IOC/DI注解开发
Spring的IOC/DI对应的配置开发就已经讲解完成,但是使用起来相对来说还是比较复杂的,复杂的
地方在配置文件。
前面咱们聊Spring的时候说过,Spring可以简化代码的开发,到现在并没有体会到。
所以Spring到底是如何简化代码开发的呢?
要想真正简化开发,就需要用到Spring的注解开发,Spring对注解支持的版本历程:
2.0版开始支持注解
2.5版注解功能趋于完善3.0版支持纯注解开发
关于注解开发,我们会讲解两块内容注解开发定义bean和纯注解开发。
注解开发定义bean用的是2.5版提供的注解,纯注解开发用的是3.0版提供的注解。
13、注解开发依赖注入
Spring为了使用注解简化开发,并没有提供构造函数注入、setter注入对应的注解,只提供了自动装
配的注解实现
出现问题的原因是,在BookServiceImpl类中添加了BookDao的属性,并提供了setter方法,但是
目前是没有提供配置注入BookDao的,所以bookDao对象为Null,调用其save方法就会报控指针异

14、注解实现按照类型注入
(1) 在BookServiceImpl类的bookDao属性上添加@Autowired注解
注意:
@Autowired可以写在属性上,也可也写在setter方法上,最简单的处理方式是写在属性上并将
setter方法删除掉
为什么setter方法可以删除呢?
自动装配基于反射设计创建对象并通过暴力反射为私有属性进行设值
普通反射只能获取public修饰的内容
暴力反射除了获取public修饰的内容还可以获取private修改的内容
所以此处无需提供setter方法
(2)@Autowired是按照类型注入,那么对应BookDao接口如果有多个实现类,比如添加
BookDaoImpl2
15、注解实现按照名称注入
当根据类型在容器中找到多个bean,注入参数的属性名又和容器中bean的名称不一致,这个时候该如
何解决,就需要使用到@Qualifier来指定注入哪个名称的bean对象。
@Qualifier注解后的值就是需要注入的bean的名称。
注意:@Qualifier不能独立使用,必须和@Autowired一起使用
16、简单数据类型注入
引用类型看完,简单类型注入就比较容易懂了。简单类型注入的是基本数据类型或者字符串类型,下
面在BookDaoImpl类中添加一个name属性,用其进行简单类型注入
17、注解读取properties配置文件
@Value一般会被用在从properties配置文件中读取内容进行使用,具体如何实现?
知识点1:@Autowired
知识点2:@Qualifier
知识点3:@Value
知识点4:@PropertySource

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值