- 浏览: 21628 次
- 性别:
- 来自: 杭州
最新评论
一.为什么要用框架和模式
1.为什么要用模式?
因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。
2.为什么要用框架?
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。
总之:就是让开发更简单,让我们成功
二. AOP
1. AOP是什么?
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
2. 切面意义何在?
就可以在这层切面上进行统一的集中式权限管理。而业务逻辑组件则无需关心权限方面的问题。也就是说,通过切面,我们可以将系统中各个不同层次上的问题隔离开来,实现统一集约式处理。各切面只需集中于自己领域内的逻辑实现。这一方面使得开发逻辑更加清晰,专业化分工更加易于进行;另一方面,由于切面的隔离,降低了耦合性,我们就可以在不同的应用中将各个切面组合使用,从而使得代码可重用性大大增强。
3. AOP应用范围
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
三.Spring事务处理
1.Spring事务管理能给我们带来什么?
对于传统的基于特定事务资源的事务处理而言(如基于JDBC 的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。
对于依赖容器的参数化事务管理而言,Spring则表现出了极大的价值。Spring本身也是一个容器,只是相对EJB容器而言,Spring显得更为轻便小巧。我们无需付出其他方面的代价,即可通过Spring实现基于容器的事务管理(本质上来讲,Spring的事务管理是基于动态AOP)。
2. Hibernate in Spring
applicationContext.xml
<!-- Hibernate SessionFactory --><bean id="sessionFactory“
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource" /></property>
<property name="mappingResources">
<list><!-- Add list of .hbm.xml files here -->
<value>org/mzone/model/Tuser.hbm.xml</value>
<value>org/mzone/model/Article.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
<prop key="hibernate.show_sql">True</prop>
</props>
</property>
</bean><!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>
<bean id="baseTxProxy" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target">
<ref local=" userManagerTarget " />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
<property name="userDAO"><ref local="userDAO"/></property>
<property name="articleDao"><ref local="articleDAO"/></property>
</bean>
UserDAO.java ArticleDAO.java
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
public void saveUser(Tuser user) {
getHibernateTemplate().saveOrUpdate(user);
}}public class ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO {
public void saveArticle(Article article) {
getHibernateTemplate().saveOrUpdate(article);
}}
HibernateDaoSupport
实现了HibernateTemplate和SessionFactory实例的关联。HibernateTemplate对Hibernate Session操作进行了封装,而HibernateTemplate.execute方法则是一封装机制的核心,感兴趣可以研究一下其实现机制。
借助HibernateTemplate我们可以脱离每次数据操作必须首先获得Session实例、启动事务、提交/回滚事务以及烦杂的try/catch/finally的繁琐操作。从而获得以上代码中精干集中的逻辑呈现效果。
org.mzone.service.impl.UserManagerImpl
public class UserManagerImpl implements UserManager {
private UserDAO userDao;
private ArticleDAO articleDao;
public void saveUserAndArticle(Tuser user, Article article) {
userDao.saveUser(user);
articleDao.saveArticle(article);
}}
测试代码
InputStream is = new FileInputStream("applicationContext.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);UserManager userManager =
(UserManager )factory.getBean(" baseTxProxy ");
user = new Tuser();
article = new Article();
user.setUsername("hellboys_topic 1");
user.setPassword("12345678_topic 1");
article.setTitle("hellboys_topic 1");
article.setContent("hellboys_topic 1");
userManager.saveUserAndArticle(user,article);
注意问题
UserManager userManager =
(UserManager )factory.getBean(" baseTxProxy ");UserManager userManager =
(UserManagerImpl) ctx.getBean("baseTxProxy");java.lang.ClassCastException
原因在于Spring的AOP实现机制,前面曾经提及,Spring中的事务管理实际上是基于动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备进行代理的方法。而对于没有实现任何接口的Java Class,需要采用其他方式,Spring通过CGLib10实现这一功能。
CGLib可以在运行期对Class行为进行修改。由于其功能强大,性能出众,常常被作为Java Dynamic Proxy
之外的动态Proxy模式的实现基础。在Spring、Hibernate中都用到了CGLib类库。
发表评论
-
Java反射Reflection--运行时生成instance
2009-11-18 10:17 1361文章来自: 博客浙江(blog.zj.com) 原文参考:ht ... -
Java反射经典实例 Java Reflection
2009-11-18 10:12 780http://jeplove.blog.zj.com/blog ... -
JProfiler试用手记
2009-04-13 16:00 840JProfiler是一款Java的性能监控工具。可以查看当前应 ... -
优化SQL的另一种思维1 性能调整综述
2009-04-12 17:34 1301作者: Peak Wong, 出处:IT专家网, 责任编辑: ... -
利用Oracle 10g SQL优化器(STA)优化语句(1)
2009-04-12 16:57 1814作者: fuyuncat 来源: w ... -
JAVA基础--JAVA中的反射机制详解
2009-02-25 22:41 778JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ... -
Java中int和Integer的区别详解
2009-02-23 21:18 1169Java中int和Integer关系是比较微妙的。关系如下: ... -
Portal(门户)是什么--IT术语
2009-02-23 21:12 3126Portal 的组成可以分为 ... -
StringBuilder类
2009-02-20 21:40 13231.3 StringBuilder类 一个String对象 ... -
Java的内存泄漏
2009-02-20 18:13 795一 问题的提出 Java ... -
JDK核心API:Java1.5语言新特性简单总结
2009-02-20 18:05 10241. 自动装箱与拆箱 对应C# 例1.1 ... -
优秀Java程序员必须了解GC的工作原理
2009-02-20 17:57 895一个优秀的Java程序员必 ... -
转:大型互联网网站架构心得之一
2009-02-06 22:10 1136我们知道,对于一个大 ... -
一 CVS服务器的安装:
2008-12-28 18:43 1384一 CVS服务器的安装: 1。查看你的操作系统上是否安装了C ... -
Jive论坛与Spring框架的经典结合
2008-12-28 15:42 976没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以 ...
相关推荐
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是国内唯一一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔,Java开发者社区和Spring开发者...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。...
揭开spring源代码的神秘面纱,展示系统阅读开源软件源代码的方法和秘诀。 掌握spring的架构原理与设计思想真的能让开发者如虎添翼吗? ioc容器如何掌控以pojo为基础的bean对象?它的轻量级开发设计思想是...
通过以上介绍可以看出,《Spring技术内幕:深入解析Spring架构与设计原理》这本书涵盖了Spring框架的核心概念和技术要点,对于希望深入了解Spring内部机制的开发者来说是一本非常有价值的参考书籍。无论是新手还是有...
《SPRING技术内幕:深入解析SPRING架构与设计原理》这本书深入探讨了Spring框架的核心机制和设计理念,旨在帮助读者理解并掌握Spring的精髓。Spring作为Java企业级应用开发的重要工具,其灵活性、可扩展性和模块化的...
Spring AOP支持声明式的事务管理和日志记录等功能。 **3. 事件驱动** Spring框架通过事件驱动模型支持异步和非阻塞的操作。例如,在Web应用程序中,可以通过监听特定的事件(如HTTP请求)来触发相应的处理程序。 ...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是国内一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的专业Java专家亲自执笔,Java开发者社区和Spring开发者...
本书《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是由计文柯所著,旨在深入分析和探讨Spring框架的架构及设计原理。Spring框架是目前Java开发者中使用最广泛的开源框架之一,它不仅提供了一种轻量级...
Spring技术内幕:深入解析 Spring架构与设计原理,本书是国内唯一一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔,Java开发者社区和Spring开发者社区...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...