spring_ioc的demo
操作步骤
导入依赖坐标→创建bean→
创建xml文件并将bean配置到文件中→
创建applicationcontext对象来从容器中得到bean→
测试调用bean的方法,可调用成功即说明有bean
1.
pom文件导入spring-context的坐标
创建接口
创建接口实现类
创建xml文件并配置bean
创建测试类,获取bean,调用方法
运行结果
小结:这种方法可以替代原来new+类名的方法来创建对象,不用在一个包中导入另外一个包,从而达到解耦合的效果,但相应的代价是要求配置额外的xml文档,但xml属于文档类,修改起来只需要改动一个文件,较为方便。
————————————————————————
xml中的bean标签属性:
1、id——bean的唯一标识
2.、class——bean所在类的路径
3、scope:singleton; prototype; request; session; global session——默认是singleton
4、init-method——bean被创建时会被调用的方法,在无参构造之后执行
5、destroy-method——bean被销毁时会被调用的方法(singleton类型bean调试时要看到这个销毁方法被调用就要手动调用applicationcontext对象的close方法【需要强转为子类,或者一开始就用子类】)
!!!注:
singleton代表spring容器中只创建一次bean,即在读取xml文件时创建bean,并之后getbean取的bean都是同一个。bean的生命周期与容器的生命周期一致
prototype代表spring容器中可有多个这个bean,但其是在applicationcontext对象使用getbean的时候被创建,与singleton不同,每一次getbean获得的bean是不同的。bean的生命周期看gc判断其长时间未使用来回收
————————————————————————
bean实例化的三种方式:
1)无参构造——上述即为无参构造方式
2)工厂静态
首先编写一个简单的工厂类和静态方法
然后修改xml配置
让spring知晓调用哪个地方的工厂方法来创建bean
同样用上面的测试,方法能调用即成功
3)工厂动态
先告知spring动态工厂的位置|——配置xml
再编写动态工厂类与方法
再告知spring用什么工厂,什么方法,创造什么id的bean
配置好后同样用上面的测试,调用方法即为成功
。
————————————————————————
set方法依赖注入:
业务模型分三层——dao,service,web
service会调用dao的方法
即service依赖于dao
spring可以靠配置来降低其依赖关系——依赖注入
1)编写service中的set方法
配置xml注入
ref指的是要注入的bean的id
name指的是set方法set的东西
(这里有个问题,即当dao包里面impl包与service包里的impl包不同名就会报错【比如dao.daoimpl与service.impl这种】,暂时不明原因)
测试controller成功
小结:这种注入可以部分解耦合,但还是要求有set方法
————————————————————————
p命名空间依赖注入
1)先给xml添加p命名空间
2)修改bean标签写法
————————————————————————
构造方法注入
1)修改serviceimpl类,即删除上面的set方法,改为有参构造
2)配置xml
————————————————————————
property注入还可以注入普通属性值
用value属性来注入
————————————————————————
xml的import
可分模块配置,然后导入总xml文件即可