因为用户业务的不断变化,我们需要不断修改大量源代码。原来是程序控制创建对象,在程序中是写死的,利用set接口进行动态实现值的注入。原来的方式对象是由程序主动创建的,主动权在程序猿,使用set注入后,程序不再具有主动性,而是变成了被动的接收对象,主动权在用户。不用再手动管理对象的创建,极大降低系统耦合性,更加专注业务上
控制反转IOC是spring的核心内容,三种实现方式,1.使用XML配置文件进行配置,2,使用注解,3,自动装配
spring容器在初始化时先读取配置文件,根据配置文件或者元数据穿件与组织对象存入容器中,使用再从容器中取出。
spplicationcontext获取上下文对象
该配置文件的根元素是
Spring框架会通过反射根据
因为反射,在Spring配置文件中配置Bean时,class属性的值必须是Bean实现类的完整类名(必须带包名),不能是接口,不能是抽象类(除非有特殊配置)。否则Spring无法使用反射创建该类的实例
- ClassPathXmlApplicaiontContext:从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。
-
Spring获取Bean对象主要有两个方法:
Object getBean(String id):根据容器中Bean的id来获取指定Bean,获取Bean之后需要进行强制类型转换。
T getBean(String name, ClassrequiredType):根据容器中Bean的id来获取指定Bean,但该方法带一个泛型参数,因此获取取Bean之后无须进行强制类型转换。 -
程序不再使用new调用构造器创建Java对象,所有的Java对象都由Spring容器负责创建。
-
IOC创建对象的方式。1.使用无参构造创建对象。默认。2使用有参构造创建对象,,1下标值,2,通过类型创建,3通过参数名。总结,在配置文件加载的时候,容器管理的对象已经初始化了。
- 构造器注入
- set方式注入(重点),依赖:bean对象的创建依赖于容器。注入:bean对象的相关属性由容器来注入。
- 环境搭建,复杂类型
- bean
- ref
- list
- set
- map
- props
- value
- null
- 测试层
- p命名空间和c命名空间进行注入,增加p约束,就可以直接注入属性(相当于set注入)。c命名空间,通过构造器注入,constrect-args
对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new关键字创建Bean实例,一旦创建成功,容器不再跟踪实例,也不会维护Bean实例的状态。
Bean的配置bean中id是bean的唯一标识符
class:bean对象对应的全限定名:包名+类名
name:也是别名,且其可以起多个别名
Inport一般用于团队开发使用,多人开发不同模块时可以将多个配置文件堕入合并为一个配置文件使用,例如文件中有多个beans.xml文件就可以创建一个applicationContext.xml使用import将其他配置文件导入。
依赖注入


