|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。
spring供应的事件办理能够分为两类:编程式的和声明式的。编程式的,对照天真,可是代码量年夜,存在反复的代码对照多;声明式的比编程式的更天真。编程式次要利用transactionTemplate。省略了部分的提交,回滚,一系列的事件对象界说,需注进事件办理对象;声明式:次要利用TransactionProxyFactoryBean,环绕Poxy的静态代办署理,可以主动的提交和回滚事件。统不雅spring事件,环绕着两个中心PlatformTransactionManager和TransactionStatus,上面我们以声明式体例来说解。
Spring声明式是以代办署理的体例完成对事件的办理。我们在Action中所利用的Service对象,实际上是代办署理对象的实例,并非我们所写的Service对象实例。既然是两个分歧的对象,那为何我们在Action中可以象利用Service对象一样的利用代办署理对象呢?为了申明成绩,假定有个Service类叫AService,它的Spring事件代办署理类为AProxyService,AService完成了一个接口IAService(这里多了一个接口IAService,是为了申明接口代办署理的体例)。
Spring事件代办署理体例有两种,一种是类代办署理体例,一种是接口代办署理体例。在Spring的设置文件中能够指定代办署理体例,今朝我们利用的都是类代办署理体例。//以下设置指定为类代办署理体例
<propertyname="proxyTargetClass"><value>true</value></property>
1、类代办署理体例
类代办署理体例的完成体例是经由过程承继的体例来完成,上面用伪代码来讲明。- interfaceIAService{
- publicvoidsave(ValueObjectobject);
- }
- classAServiceimplementsIAService{
- publicvoidsave(ValueObjectobject){...}
- }
- //Spring主动天生的代办署理类.
- classAProxyServiceextendsAService{
- publicvoidsave(ValueObjectobject){
- try{
- 启动事件的代码;
- super.save(object);
- 提交事件的代码;
- }catch(Exceptione){
- 回滚事件的代码;
- }
- }
- }
复制代码 在Action的挪用代码:
AServicea=(AService)getBean("aProxyServiceBeanName");
这里getBean("aProxyServiceBeanName")失掉的是AProxyService类的实例,由于AProxyService是AService的一个子类,以是这里能够强迫转型为AService。我们前面挪用a.save(object)的时分,挪用的是AProxyService.save()办法,而这个办法是有事件处置的。Spring就是如许实现了事件办理。//上面的这行代码也是一样的效果。
IAServicea=(IAService)getBean("aProxyServiceBeanName");
Spring经由过程CGLib来完成了类代办署理体例。
2、接口代办署理体例
接口代办署理体例是经由过程完成接口,援用类实例来完成的,以是这里必定要有一个接口IAService,而类代办署理体例是不必要这个接口的。- //Spring主动天生的代办署理类.
- classAProxyServiceimplementsIAService{
- privateAServiceaService;
- publicvoidsetAService(AServiceaService){
- this.aService=aService;
- }
- publicvoidsave(ValueObjectobject){
- try{
- 启动事件的代码;
- aService.save(object);//注重这行代码与下面的分歧。
- 提交事件的代码;
- }catch(Exceptione){
- 回滚事件的代码;
- }
- }
- }
复制代码 在Action的挪用代码:
AServicea=(AService)getBean("aProxyServiceBeanName");
下面这行代码会报ClassCastException毛病,由于getBean("aProxyServiceBeanName")失掉的是AProxyService类的实例,而AProxyService实例其实不能转型为AService范例,固然二者都完成了统一个接口,但他们之间并没有承继干系。就象ArrayList和LinkedList,他们能够转换成List,但他们之间其实不能相互转换。以是这里必需如许利用:
IAServicea=(IAService)getBean("aProxyServiceBeanName");//要转换成接口范例。
挪用a.save()办法实在就是挪用AProxyService.save()办法。
Spring经由过程Java静态代办署理来完成接口代办署理
检察本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。 |
|