对于SSH框架中部分的操作简化我分为两大类:
一:操作
1. 在我们SSH的struts.xml里
1 <action name="Action类_*" class="注入的实例" method="{1}"></action>
例如:我们访问的是Action_test.action,它就会自动调用Action类的test方法
2.在我们的action标签里
1 <result type="redirectAction"></result>
Action处理完成后重定向到指定的Action
3.Spring声明式事务管理
使用事务管理的目的:比如同时需要执行两条SQL语句时第二条失败了,我们就应该回滚,不让操作继续修改数据库的信息
在我们的dao包里,以前每使用到一个会话都要openSession,最后关闭,我们现在可以使用Spring给我们提供的getCurrentSession方法,每次都会去获取已经存在的会话,主要是要分离dao里的核心关注点和横切关注点,使用声明式事务管理我们要在applicationContext.xml配置文件加入以下代码
1<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 2 <property name="sessionFactory" ref="sessionFactory"></property> 3</bean> 4 5<tx:advice id="txAdvice" transaction-manager="transactionManager"> 6 <tx:attributes> 7 <tx:method name="add*" propagation="REQUIRED" /> 8 <tx:method name="del*" propagation="REQUIRED" /> 9 <tx:method name="mod*" propagation="REQUIRED" /> 10 <tx:method name="*" propagation="REQUIRED" read-only="true" /> 11 </tx:attributes> 12</tx:advice> 13 14<aop:config> 15 <aop:pointcut id="interceptorPointCuts" 16 expression="execution(* 17 news.dao.*.*(..))" /> 18 <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" /> 19</aop:config>
注意:缺包问题可以自行上官网下载,我随便在里提供一下Aop声明式事务管理缺的包.rar(点击即可下载),解压复制到项目的lib目录即可使用
二:注解
在我们使用注解前先在spring的applicationContext.xml配置文件加入以下代码
1 <!—自动扫描包,也会自动注入解析器 --> 2 <context:component-scan base-package="根包名"></context:component-scan>
1.简化Spring的注入,把以前的applicationContext.xml配置文件<bean>、<property>标签通通去除掉
首先在我们的Action、Service、Dao包里只需要加相对应的定义的注解@Controller、@Service、@Repository
注意:
a.例如@Controller(name="定义注入的实例"),不指定注入的实例,注解将会自动找到对应的Action的名称并会将首字母改成小写,将作为定义的名称
b.不要忘记了在后面加上 Scope("prototype")非单例注解
2.定义完成后,我们进一步的简化,把Action、Service、Dao包中的set(注入)方法去掉,我们只需要定义声明变量就可以了,使用@Autowired、@Qualifier("注入实例的名称")
注意:@Autowired的单独使用,Spring会把返回值的类型跟你需要注入的实例做对比是否一致再注入对应的实例,万一返回值类型相同的有多个,注入的实例定会出错
3. 我们将使用注解,代替以前的实体类的XXX.hbm.xml映像文件
在我们的实体类加入以下注解
@Entity、@Table(name="数据库的表名")、@Id、
@GeneratedValue(strategy = GenerationType.AUTO)生成主键策略
@Column表示字段,如果需要加描述可以使用该注解的对应属性
删除完映射文件,我们还需要在applicationContext.xml里面配置,如下:
<property name="packagesToScan"> <list> <value>实体类所在的包</value> </list> </property>
4. 附加jdk的注解, @Resource(name="注入的名称")也可以代替@Autowired、@Qualifier(name="注入的名称")
5.Spring使用注解事务管理
要在我们的applicationContext.xml加上以下代码
1<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 2 <property name="sessionFactory" ref="sessionFactory"></property> 3</bean> 4 5<tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional写到类外就相当于整个类的方法都要经过事务
@Transactional(readOnly=true)也可以写到某个方法前,只读
6.SSH注解优势与弊端