|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)Spring供应的事件办理能够分为两类:编程式的和声明式的。编程式的,对照天真,可是代码量年夜,存在反复的代码对照多;而声明式的比编程式的更天真便利。本文将会商这两种事件办理的区分。
传统的JDBC事件办理
以往利用JDBC举行数据操纵时,一样平常接纳DataSource,从数据源中失掉Connection,我们晓得数据源是线程平安的,而毗连不是线程平安的,以是对每一个哀求都是从数据源中从头掏出一个毗连。一样平常的数据源由容器举行办理,包含毗连池。比方TOMCAT,WEBSPHERE,WEBLOGIC等这些J2EE贸易容器都供应了这个功效。
以往的我们利用JDBC在写代码时,事件办理大概会是如许:
Connectionconn=null;
try
{
conn=DBConnectionFactory.getConnection;
conn.setAutoCommit(false);
//dosomething
conn.commit();//committranscation
}
catch(Exceptione)
{
conn.rollback();
//dosth
}
finally
{
try
{
conn.close();
}
catch(SQLExceptionse){//dosth.}
//closeResultSet,PreparedStatement,Connection
//notice:MaybeocurrExceptionwhenuclosers,pstmt,conn
}
依照以往的思绪来写代码,代码量对照长,并且简单忽略,忘记一些try/catch,激发一些非常没法catch,固然偶然候我们会写DBTool类,来封闭这些资本,而且包管在封闭这些资本时,不向外抛非常。
Spring供应的编程式的事件处置
Spring供应了几个关于事件处置的类:
・TransactionDefinition//事件属性界说
・TranscationStatus//代表了以后的事件,能够提交,回滚。
・PlatformTransactionManager这个是spring供应的用于办理事件的基本接口,其下有一个完成的笼统类AbstractPlatformTransactionManager,我们利用的事件办理类比方DataSourceTransactionManager等都是这个类的子类。
我们利用编程式的事件办理流程大概以下:
1声明数据源
2声明一个事件办理类,比方DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等
3在我们的代码中到场事件处置代码:
TransactionDefinitiontd=newTransactionDefinition();
TransactionStatusts=transactionManager.getTransaction(td);
try
{
//dosth
transactionManager.commit(ts);
}
catch(Exceptione){transactionManager.rollback(ts);}
利用spring供应的事件模板TransactionTemplate
voidadd()
{
transactionTemplate.execute(newTransactionCallback(){
pulicObjectdoInTransaction(TransactionStatusts)
{//dosth}
}
}
TransactionTemplate也是为我们省往了部分事件提交、回滚代码;界说事件模板时,需注进事件办理对象.
Spring声明式事件处置
Spring声明式事件处置也次要利用了ioc,aop头脑,供应了TransactionInterceptor拦阻器和经常使用的代办署理类TransactionProxyFactoryBean,能够间接对组件举行事件代办署理。
利用TransactionInterceptor步骤
1.界说数据源,事件办理类
2.界说事件拦阻器,suchas:
<beanid="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor">
<propertyname="transactionManager"><refbean="transactionManager"/></property>
<propertyname="transactionAttributeSource">
<value>
com.test.UserManager.*r=PROPAGATION_REQUIRED
</value>
</property>
</bean>
3.为组件声明一个代办署理类:ProxyFactoryBean
<beanid="userManager"class="org.springframework.aop.framework.ProxyFactoryBean">
<propertyname="proxyInterfaces"><value>com.test.UserManager</value></property>
<propertyname="interceptorNames">
<list>
<idreflocal="transactionInterceptor"/>
</list>
</property>
</bean>
利用TransactionProxyFactoryBean:
<beanid="userManager"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<propertyname="transactionManager"><refbean="transactionManager"/></property>
<propertyname="target"><reflocal="userManagerTarget"/></property>
<propertyname="transactionAttributes">
<props>
<propkey="insert*">PROPAGATION_REQUIRED</prop>
<propkey="update*">PROPAGATION_REQUIRED</prop>
<propkey="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
TransactionProxyFactoryBean只是为组件的事件代办署理,假如我们要给组件增加一些营业方面的考证等,可使用TransactionTemplate加拦阻器体例,为组件增加多个拦阻器,springAOP中供应了三类Advice,即前加强,后加强,抛出非常时的加强,能够天真利用。
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点 |
|