一.Spring是什么?
(1)Spring是一个IoC容器,利用DI技术管理对象之间的依赖!
IoC: Inversion of Control(控制反转)
DI: Dependency Injection(依赖注入)
Spring也是一个对象工厂,它负责生产(即创建)和管理(比如控制它们的生命周期,或给特定的对象创建代理等等)着各种对象
Spring也是一个对象工厂,它负责生产(即创建)和管理(比如控制它们的生命周期,或给特定的对象创建代理等等)着各种对象
控制反转(IoC)
所谓控制:即获取依赖对象的方式
假如A要调用B的方法(即A依赖于B),则A首先要获得B对象
B b = new BImplement();
A直接依赖于B的具体实现
B b = Factory.getBInstance();
A依赖于工厂对象
上面就是没有“反过来”的情况:A主动获取B对象
反转
即如果A要获取B对象,不是由A主动获取B对象,而是由其它人把B送给A(即将B注入给A),因为A依赖于B,所以B是A的依赖对象,因此称“依赖注入(DI)”
☞DI与scope
把多例对象注入到多利对象中(没有问题)
把多例对象注入到单利对象中(有问题)
把单利对象注入到多例对象中(没有问题)
把单例对象注入到单利对象中(没有问题)
(2)类型转换器的配置
<!--注册类型转换器 -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<!-- key对应的就是类型,value对应的就是转换器 -->
<entrykey="java.util.Date"value="cn.com.leadfar.spring.actions.DateConver"></entry>
</map>
</property>
</bean>
(3)注入的几种方式
使用构造器注入
使用属性setter方法注入
使用Field注入(用于注解方式)
注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。
1.手工装配依赖对象
2.自动装配依赖对象
二.注解(annotation)和XML通用
✈利用注解进行注入
---Component,默认定义的bean的ID是类名(第一个字母小写)
----Controller 定义Action
---Service 定义业务逻辑对象
---Repository 定义持久化层对象
--Scope(“prototype” )定义Scope属性
---Resource注解缺省是按类型注入,除非指定name属性
典型的应用 Action---service---dao(三层架构中的注解)
异常:
(1)懒加载异常 由于hibernate处于离线状态,将session关闭,导致jsp页面不能访问数据库中的内容。如何解决:为了解决。Ssh集成的时候通常在web.xml中定义OpensessionInViewFilter.该Filter通常定义在最前面