文章目录
1. Spring程序开发步骤
步骤一:
-
用到了框架所以要导入Spring的Maven坐标
-
编写UserDAO的接口和UserDAOImpl的一个实现(创建Bean)
-
创建Spring核心配置文件(applicationContext.xml)
-
在Spring核心配置文件中配置UserDAOImpl(规定bean标签的id和class)
-
使用Spring的API获得Bean实例
2. Spring配置文件
2.1 Bean标签基本配置
- 用于配置–对象交由Spring来创建
- 默认情况下调用的是无参构造器,如果没有无参构造器则不能创建成功
基本属性:
- id:Bean实例在Spring容器中的唯一标识
- class:Bean的全限定名
2.2 Bean标签范围配置
- scope是singleton时,会在加载配置文件的时候就创建好了Bean,之后的获取都是获取同样的bean实例(scope默认是单例模式的)
- scope是prototype时,加载配置文件时不会创建Bean实例,而是在调用getBean()方法时不断的获取新的Bean实例
- 在UserDaoImpl类中重写无参构造器,加上一个打印语句,在控制台查看打印语句
2.2 Bean生命周期配置
- init-method:指定类中的初始化方法名称
- destroy-method:指定类中销毁方法名称
2.3 Bean实例化三种方式
-
无参构造方法实例化
-
工厂静态方法实例化
-
工厂实例方法实例化
2.4 Bean的依赖注入分析
在容器内部将Dao给Service是如何给的呢?
2.5 依赖注入概念
依赖注入:是Spring核心IOC的具体实现
在编写程序时,通过控制反转,把对象的创建交给Spring,但是代码中不可能出现没有依赖的情况。IOC解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用Spring之后,就让Spring来维护了。
简单说,就是坐等框架把持久层对象传入业务层,而不是我们自己去获取。
2.6 Bean的依赖注入方式
怎么把UserDao注入到UserService内部呢?
-
构造方法
-
setter方法
注意:如果说按照下面的这种方式的话会报空指针异常:
原因:因为此时的这个service不是从容器中拿的,是自己创建的,没有对userDao属性进行赋值,而之前的service都是从容器中拿的,容器中已经在读取配置文件的时候进行了属性的赋值
补充:
2.7 Bean的依赖注入的数据类型
上面的操作都是注入的引用Bean,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。
- 普通数据类型:
- 集合
2.8 引入其他配置文件(分模块开发)
将部分配置拆解到其他配置文件中,而在Spring主配置文件中通过import标签加载
<import resource="applicationContext-xxx.xml"/>
2.9 spring的重点配置
3. Spring相关API
3.1 ApplicationContext的继承体系
ApplicationContext:
接口类型,代表应用上下文,可以通过其实例获取Spring容器中的Bean对象
3.2 ApplicationContext的实现类
ClassPathXmlApplicationContext
从类的根路径下加载配置文件(推荐使用)FileSystemXmlApplicationContext
从磁盘路径上加载配置文件AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建spring容器。用它来读取注解