浅谈SSH

从java基础到javaweb的内容,体现了Java这门语言的充分的优势。
而在Javaweb的沿袭中也能总结出这样一个道理:
配置优于书写,封装优于反复。
Javaweb的开发从最初的servelet技术,到jsp出现之后大家把大量java代码写入页面,到后来的servlet技术的独立,在这一阶段网页的开发处于低效,冗余的阶段,而当两个小组整合之后出现的struts2中的action以及其xml的配置文件开始让人感受到了配置的优越,而在struts2自身定义的20余个拦截器,更是将基础性的代码完全的封装了起来,以前需要页面传参数,servlet调用getParameters的方法得到的参数,已经到了只需要一个private属性(setter getter)就能得到的地步,从这里开始,java的三大特性开始体现的淋漓尽致。

封装,继承,多态

封装:
学到一定的阶段学习java其实已经是单纯地在学习jdk和第三方API的地步,万事万物都是对象,也就意味着万事万物都可以用“.”去调用,最近在SSH框架中遇见了这么一个问题:getHibernateTemplate.save(T t);方法时页面会直接抛出action结果error,同时也没有异常被程序抛出,细细想来,一个简单的.save(T t)方法经过了好几层的不断封装,

最初的JDBC代码-DBUtils-Hibernate-HibernateDaoSupport—>HibernateTemplate

在不断的应用中历代程序员们对方法不断的抽取,封装是的使用越来越简单,学习越来越容易,而这一点也充分地体现出了开源地优点,就如同Linux系统一般,正是无数人地贡献,算法越来越精炼,完善,在业务开发中对本系统的部分功能性代码进行有效地封装,也能极大地提高开发效率,比如在单独使用Hibernate框架地时候,得到currentsession需要绑定线程地Factory去获取,如果自行封装一个HibernateUtils用可以用一行代码实现。
继承:
继承更像是java的一种繁殖策略,而他的每一个孩子都比自己在某一方面更加强大,简单来说,在使用struts2框架的时候必然要面临写action中方法的问题,这是一般都会选择去extends Actionsurpport 这个类使用struts开发者和另一个小组也就是熟知的xwork所开发的,继承了这么一个方法之后,用户只需要重写一下他的execute方法,然后再配置一下struts2.xml里边的结果集就可以了,可以说极大的减轻了用户负担,这样的例子在开发中不胜枚举,比如在持久层中我们就会遇到操作数据库的问题,当然我们可以使用Hibernate原始提供的原生SQL HQL ceriteria 但是,由于封装特性的存在,一些基础的查询被封装了起来,提供了HibernateDaoSurpport
甚至一些技巧性地代码被大家给公认了,我想这一下几句代码不久之后也会被struts小组选用封装起来:

public BaseDaoImpl() {
// 获得当前类型的带有泛型类型的父类
ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
// 获得运行期的泛型类型
clazz = (Class) ptClass.getActualTypeArguments()[0];
}

配置优于重复
第一个接触配置文件的框架应该是持久层处理的Hibernae框架,说到这到也有个趣事,有叫 ‘冬眠(Hibernate)’的框架也就出现了 ‘春天(spring)’,原始地hibernate框架使用了自己的xml配置文件 hibernate.cfg.xml 在这个文件里配置数据库连接的基本控制,诸如方言,用户密码,主机,当然也会有隔离级别这些高级一些的配置,虽然平时都是使用的default。
第二个配置文件是来自于 struts2 框架的 struts.xml在这里面去配置拦截器栈也可以去自己定义拦截器,控制拦截器的位置,在后期的学习中能够清晰的感受到这些拦截器顺序的精妙,也可以在配置文件中配置每个action的结果处理,一共有四种 :
转发 重定向 转发到action 重定向到action
同时也可以配置全局结果集,诸如404等页面
第三个配置文件来自于spring,一个java学习中里程碑式的框架,而spring的配置文件做到了位置任意,名称任意,只需要自己说明,当然开发的情况下我们一般选择把这个配置文件定义为applicationContext.xml 放到src下边。
Spring的对象不同于其他框架,spring开发小组恨不得在类名中把这个类的功能说的清清楚楚,
比如
//1 创建容器对象
//填写的是xml配置文件的路径 从src开始
ClassPathXmlApplicationContext(“applicationContext.xml”);
所以在后期开发中只要遇见类名比较长的类一般来说都是spring小组定义的。
Spring的里程碑在于它创造性的 IOC 也就是inverse of control(控制反转)
Spring一把 把对象的创建权拿了过来,以至于struts2的对象都可以统一的交给spring
恰巧spring海纳百川,什么都能装,将web开发引向了一个更为高效的方向。
在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。个人也不喜欢配置那么多的xml文件。
利用java的注解实现ssh框架,注解相当于一种标记加了注解就等于打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具包和其他程序可以用反射来了解你的类以及各种元素上有何种标记,看你有什么标记,就去干相应的事,标记可以加载包,类,字段,方法,方法的参数以及局部变量上。关于注解在这里不多说,网上大把资料。而spring另一个突出的优点就是它的事务控制,使用了通知和织入的方式,而这一切的事务控制代码都不需要用户自己书写,在applicationContext.xml中配置即可:
<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>
tx:attributes

<tx:method name=“save*” rollback-for=“Exception” propagation=“REQUIRED” read-only=“false”/>
<tx:method name=“persist*” isolation=“DEFAULT” propagation=“REQUIRED” read-only=“false” />
<tx:method name="" isolation=“DEFAULT” propagation=“REQUIRED” read-only=“false” />
</tx:attributes>
</tx:advice>

aop:config

<aop:pointcut expression="execution(
cn.Love.service.impl.ServiceImpl.(…))" id=“txPc” />

	<!-- 配置切面 -->
	<aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
</aop:config>

猜你喜欢

转载自blog.csdn.net/qq_41009846/article/details/82947229
ssh