spring框架实现实例化和依赖注入的方式
(1)考察目标
主要考察对于Spring容器管理的bean的实例化方式,以及spring管理的bean如何在项目中注入使用。
(2)题目分析
Spring框架实现实例化的三种方式:
第1种:使用构造器实例化Bean
这是最简单的方式,Spring IoC容器即能使用默认空构造器也能使用有参数构造器两种方式创建Bean。
第2种:使用静态工厂方式实例化Bean
使用这种方式除了指定必须的class属性,还要指定factory-method属性来指定实例化Bean的方法,该方法必须是静态方法。而且使用静态工厂方法也允许指定方法参数,spring IoC容器将调用此属性指定的方法来获取Bean。
第3种:使用实例工厂方法实例化Bean
使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂Bean的id,factory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方式一样。
依赖注入的方式:
依赖注入是Spring协调不同Bean实例之间的合作而提供的一种工作机制,在确保Bean实例之间合作的同时,并能保持每个Bean的相对独立性。
基于构造函数的注入
构造函数注入就是通过Bean类的构造方法,将Bean所依赖的对象注入。构造函数的参数一般情况下就是依赖项,spring容器会根据bean中指定的构造函数参数来决定调用那个构造。
基于set方法的注入
将Bean所依赖的对象通过设置函数注入,Bean需要为注入的依赖对象提供设置方法。
基于自动装配的注入
Spring IOC容器会基于反射查看Bean定义的类。当Spring 容器发现Bean被设置为自动装配的by Type模式后,它会根据参数类型在Spring容器中查找与参数类型相同的被依赖Bean对象,如果已经创建,则会把被依赖的对象自动注入到Bean中,如果没有创建,则不会注入。注入过程需要借助Bean提供的设置方法来完成,否则注入失败。
基于注解的依赖注入
Spring主要提供了@Autowired和@Resource注解模式,下面也重点讨论这两种注解模式。
@Autowired**装配顺序**
@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用。
@Resource装配顺序
1)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2)如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3)如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4)如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配
(3)应用场景
在实际开发中,我们应用spring框架,就应让spring框架维护对象间的依赖关系,包括使用spring的核心容器(IOC)以及依赖注入。
(4)总结
本题考察点:
1)Spring容器管理的bean的实例化方式
2)Spring容器管理的bean对象如何实现注入的