此spring3的部署,放在最后,在之前已经部署好的Struts2和Hibernate3基础上,亦可以把他当作是SSH整合的部署
一、 首先struts2和spring3整合(非注解版)
1. 需要引入spring3的JAR包:
[img]http://dl2.iteye.com/upload/attachment/0087/6110/ffe926c6-7c74-30cb-b9bf-8eae04fac463.bmp[/img]
还需特别引入struts2和spring3的插件
[img]http://dl2.iteye.com/upload/attachment/0087/6122/b7fa49a3-0506-34f7-9e82-df1a85130107.bmp[/img]
2. Web.xml中加入spring的监听,以及指明配置文件applicationContext.xml的位置
[img]http://dl2.iteye.com/upload/attachment/0087/6112/d6fc10f0-5741-3dd7-ac8f-b5ba1e401264.bmp[/img]
3. 新建applicationContext.xml放在src更目录下
[img]http://dl2.iteye.com/upload/attachment/0087/6116/69ad1663-c30f-35ab-bcab-4c824cd7edd3.bmp[/img]
4. Action、manager、dao类皆用set方法获得,取LoginAction为例:
[img]http://dl2.iteye.com/upload/attachment/0087/6114/7e4cce78-f6d0-33f7-8935-3c46393961f1.bmp[/img]
二、 注解版:
1. 要使用注解,首先在applicationContext.xml中加入:
[img]http://dl2.iteye.com/upload/attachment/0087/6126/c31fdf10-12a4-32f0-9cec-82a09adef038.bmp[/img]
其中base-package为需要扫描的包(含所有子包),注意必须对相应的bean标记组件注解,否则是无法注入的。
@Service用于标注业务层组件,
@Controller用于标注控制层组件(如struts中的action),
@Repository用于标注数据访问组件,即DAO组件,
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
2. 基于@Autowired的自动装配(@Resource其实与@Autowired的作用相似),默认是根据类型注入,可以用于构造器、字段、方法注入,使用方式如下:
[img]http://dl2.iteye.com/upload/attachment/0087/6128/bb731eba-23c7-3463-800d-795836114f28.bmp[/img]
3. Aop切面编程:
需要加入的jar包:
[img]http://dl2.iteye.com/upload/attachment/0087/6132/1c567d65-610d-36b2-bc89-7d8cbb94c6a2.bmp[/img]
ApplicationContext.xml中需要加入:
[img]http://dl2.iteye.com/upload/attachment/0087/6130/278f04ad-c19c-3333-a4c8-be0941530d24.bmp[/img]
常用注解列表:(详见aop包下的测试代码)
<aop:advisor> 定义一个AOP通知者
<aop:after> 后通知
<aop:after-returning> 返回后通知
<aop:after-throwing> 抛出后通知
<aop:around> 周围通知
<aop:aspect>官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,
(Joinpoint) :程序执行过程中的某一行为
<aop:before>前通知
<aop:config>顶级配置元素,类似于<beans>这种东西
<aop:pointcut>定义一个切点
三、 spring3 和hibernate3 的整合:
需要引入2个jar包:
[img]http://dl2.iteye.com/upload/attachment/0087/6135/994b48fc-dcac-3c35-8e4e-4b9fdc31a22c.bmp[/img]
1. 首先在tomcat的server.xml中配置数据源
[img]http://dl2.iteye.com/upload/attachment/0087/6141/2c32d898-5821-3c06-989a-285854da451e.bmp[/img]
2. 创建application.properties文件
[img]http://dl2.iteye.com/upload/attachment/0087/6139/50dec0b9-02b0-35a8-8f2e-aaaf01f78be5.bmp[/img]
3. 配置applicationContext.xml
[img]http://dl2.iteye.com/upload/attachment/0087/6150/f21dd229-87b6-3cdc-a2a7-9c23023f9f03.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0087/6152/5f9b133c-c4ea-33b1-bf25-d8325983fc49.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0087/6154/20079d3a-2f9b-3787-9129-29b2f7a3fbac.bmp[/img]
4. 注意:
a.因为此配置是用注解方式管理事物的,可以这样定义:
[img]http://dl2.iteye.com/upload/attachment/0087/6143/9cdbcdc8-3f99-3fe1-8c72-e7be1c1d439f.bmp[/img]
d.实体类要实现序列化,因为对象要想传输必须先序列号,目的是方便网络传输,尤其是用到二级缓存时,并且允许了它File存储,那么Hibernate中的已经Cache了实体类就会需要写入硬盘的文件了,不序列化会报错。
e.Serial version id,类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的serialVersionUID,也有可能相同。为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值。显式地定义serialVersionUID有两种用途:
1)在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
2)当你序列化了一个类实例后,希望更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出一个异常。如果你添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值(对象为null,基本类型为相应的初始默认值),字段被删除将不设置。
一、 首先struts2和spring3整合(非注解版)
1. 需要引入spring3的JAR包:
[img]http://dl2.iteye.com/upload/attachment/0087/6110/ffe926c6-7c74-30cb-b9bf-8eae04fac463.bmp[/img]
还需特别引入struts2和spring3的插件
[img]http://dl2.iteye.com/upload/attachment/0087/6122/b7fa49a3-0506-34f7-9e82-df1a85130107.bmp[/img]
2. Web.xml中加入spring的监听,以及指明配置文件applicationContext.xml的位置
[img]http://dl2.iteye.com/upload/attachment/0087/6112/d6fc10f0-5741-3dd7-ac8f-b5ba1e401264.bmp[/img]
3. 新建applicationContext.xml放在src更目录下
[img]http://dl2.iteye.com/upload/attachment/0087/6116/69ad1663-c30f-35ab-bcab-4c824cd7edd3.bmp[/img]
4. Action、manager、dao类皆用set方法获得,取LoginAction为例:
[img]http://dl2.iteye.com/upload/attachment/0087/6114/7e4cce78-f6d0-33f7-8935-3c46393961f1.bmp[/img]
二、 注解版:
1. 要使用注解,首先在applicationContext.xml中加入:
[img]http://dl2.iteye.com/upload/attachment/0087/6126/c31fdf10-12a4-32f0-9cec-82a09adef038.bmp[/img]
其中base-package为需要扫描的包(含所有子包),注意必须对相应的bean标记组件注解,否则是无法注入的。
@Service用于标注业务层组件,
@Controller用于标注控制层组件(如struts中的action),
@Repository用于标注数据访问组件,即DAO组件,
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
2. 基于@Autowired的自动装配(@Resource其实与@Autowired的作用相似),默认是根据类型注入,可以用于构造器、字段、方法注入,使用方式如下:
[img]http://dl2.iteye.com/upload/attachment/0087/6128/bb731eba-23c7-3463-800d-795836114f28.bmp[/img]
3. Aop切面编程:
需要加入的jar包:
[img]http://dl2.iteye.com/upload/attachment/0087/6132/1c567d65-610d-36b2-bc89-7d8cbb94c6a2.bmp[/img]
ApplicationContext.xml中需要加入:
[img]http://dl2.iteye.com/upload/attachment/0087/6130/278f04ad-c19c-3333-a4c8-be0941530d24.bmp[/img]
常用注解列表:(详见aop包下的测试代码)
<aop:advisor> 定义一个AOP通知者
<aop:after> 后通知
<aop:after-returning> 返回后通知
<aop:after-throwing> 抛出后通知
<aop:around> 周围通知
<aop:aspect>官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,
(Joinpoint) :程序执行过程中的某一行为
<aop:before>前通知
<aop:config>顶级配置元素,类似于<beans>这种东西
<aop:pointcut>定义一个切点
三、 spring3 和hibernate3 的整合:
需要引入2个jar包:
[img]http://dl2.iteye.com/upload/attachment/0087/6135/994b48fc-dcac-3c35-8e4e-4b9fdc31a22c.bmp[/img]
1. 首先在tomcat的server.xml中配置数据源
[img]http://dl2.iteye.com/upload/attachment/0087/6141/2c32d898-5821-3c06-989a-285854da451e.bmp[/img]
2. 创建application.properties文件
[img]http://dl2.iteye.com/upload/attachment/0087/6139/50dec0b9-02b0-35a8-8f2e-aaaf01f78be5.bmp[/img]
3. 配置applicationContext.xml
[img]http://dl2.iteye.com/upload/attachment/0087/6150/f21dd229-87b6-3cdc-a2a7-9c23023f9f03.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0087/6152/5f9b133c-c4ea-33b1-bf25-d8325983fc49.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0087/6154/20079d3a-2f9b-3787-9129-29b2f7a3fbac.bmp[/img]
4. 注意:
a.因为此配置是用注解方式管理事物的,可以这样定义:
[img]http://dl2.iteye.com/upload/attachment/0087/6143/9cdbcdc8-3f99-3fe1-8c72-e7be1c1d439f.bmp[/img]
d.实体类要实现序列化,因为对象要想传输必须先序列号,目的是方便网络传输,尤其是用到二级缓存时,并且允许了它File存储,那么Hibernate中的已经Cache了实体类就会需要写入硬盘的文件了,不序列化会报错。
e.Serial version id,类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的serialVersionUID,也有可能相同。为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值。显式地定义serialVersionUID有两种用途:
1)在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
2)当你序列化了一个类实例后,希望更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出一个异常。如果你添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值(对象为null,基本类型为相应的初始默认值),字段被删除将不设置。