目标: 1.了解掌握spring的xml文件配置的几种方式
2.对注解开发进行一定程度的理解(Day3的内容)
开发步骤:
1.导入相关依赖
2.创建接口及其实现类
3.编写核心配置文件
4.装配bean ,使用几种方式
5.验证各种bean装配方式的效果
IOC的基本原理就是使用java的反射机制,通过反射来获取对象,class.forName("全包名") 会返回一个实例对象
其实际反射的一系列代码都被spring进行封装了一层,在spring的getbean()方法的类中进行封装
Spring bean标签的范围配置
Scope:指对象的作用范围,取值如下:
singleton 默认值,单例的 (即 通过反射获得的对象是同一个对象)
protetype 多例的 (通过反射获得的对象是不同的对象)
request web项目中,Spring 创建一个bean的对象,将对象存入到Request域中
session web项目中,Spring创建一个bean的对象,将对象存入到session域中
global session web项目中,应用在portlet环境,如果没有Portlet环境,那么globalsession相当于session
测试 --------在xml文件中给装配的bean配置一个scope 分别是singleton 和 protetype
然后在test中分别打印通过反射获得的对象的地址
就会发现,配置了singleton的,获取到的对象的地址是相同的,表明是同一个实例,而
配置了protetype的,打印出的对象地址各不相同,表明是多例的
附图:
同时,在使用singleton模式时,对象的创建是在加载配置文件的时候就进行的
下图可看见当程序走到getBean()时,对象反射还没有进行,但是却已经调用了对象的无参构造
表明singleton模式在加载配置文件的时候进行了创建,反之,这里也配置了protetype模式,但是其对象却没有在加载配置文件时候进行创建,只有在进行反射时才创建对象
bean的生命周期
init-method :指定类中的初始化方法 (用于对象创建完毕时想要初始化的数据)
destory-method :指定类中销毁方法名称(用于对象销毁之前用来执行相关的销毁工作)
bean实例化的三种方式:
1:无参构造方法实例化----以上的所有测试都是无参构造(也是常用)
2:工厂静态方法实例化(不常用--了解即可)
3:工厂实例方法实例化(不常用--了解即可)
Spring配置文件的依赖注入
一:dao层的对象和service层的对象都存在于Spring容器中,但其实web层最终只是使用Service层的对象 ,不需要使用dao层的对象,总之就是service层要获取到dao层对象,使用其对象的方法来实现service的方法,所以可以在Spring容器中将dao层的对象组装到service内部完成的操作------依赖注入
内部组装方法:
一:set()方法
二:构造方法
使用set方法进行依赖注入:
一:将要被注入的对象设置为注入类的一个属性,并且要设置set()方法
二:要被注入对象要在xml文件中装配bean,放入spring容器中,同时注入类也要
装配bean,让二者同时存在Spring容器中
三,在注入类的bean中配置<property name="" ref="">标签,同于将对象进行set进去。
依赖注入完成,全程只需要关注xml配置文件
由于字标签写法繁琐,所以使用p命名空间注入
1:引入p命名空间标识----
xmlns:p="http://www.springframework.org/schema/p"
2:使用p: ref=""进行引入对象进行set
依赖注入完成
2:有参构造方法注入
使用<constructor-arg name="" ref="'>标签进行注入
当然--以上都是引用bean对象,普通数据类型和集合数据类型也一样可以引入
普通数据:
成功:
特殊数据类型注入: List Map
采用set()方法注入:
一:要在注入类将相应的数据类型设置为属性,并且生成set方法
二:在xml配置文件中将要使用到的对象全部都装配到bean中:
三:在xml文件中使用<property name ="">子标签进行配置
如果是List,则还需要在子标签下创建<list>子标签
再在其下创建<value>子标签 数据写在此标签下
如果是map,需要在其子标签下创建map子标签,
再在其下创建<entry key="" value=''/value-ref="">子标签
写入数据