博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ssh hibernate和spring 的注解介绍
阅读量:4036 次
发布时间:2019-05-24

本文共 3851 字,大约阅读时间需要 12 分钟。

最近在做ssh架构的项目,用到了注解。然后就找了些资料,总结了下:

<tx:method/> 有关的设置

   <tx:advice id="defaultTxAdvice">

       <tx:attributes>

           <tx:method name="get*" read-only="true"/>

           <tx:method name="*"/>

       </tx:attributes>

   </tx:advice>

9.5.5. <tx:advice/>有关的设置

这一节里将描述通过 <tx:advice/> 标签来指定不同的事务性设置。默认的<tx:advice/> 设置如下:

事务传播设置是 REQUIRED

隔离级别是 DEFAULT

事务是 读/写

事务超时默认是依赖于事务系统的,或者事务超时没有被支持。

任何 RuntimeException 将触发事务回滚,但是任何 checkedException 将不触发事务回滚

这些默认的设置当然也是可以被改变的。 <tx:advice/> 和 <tx:attributes/>标签里的 <tx:method/> 各种属性设置总结如下:

表 9.1. <tx:method/> 有关的设置

属性   是否需要? 默认值 描述

name   是    

与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如:'get*'、'handle*'、'on*Event'等等。

propagation   不  REQUIRED   事务传播行为

isolation  不  DEFAULT    事务隔离级别

timeout    不  -1  事务超时的时间(以秒为单位)

read-only  不  false  事务是否只读?

rollback-for  不    

将被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'

no-rollback-for   不    

不 被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'

 

使用过SSH注解的屌丝们都知道,要想使用注解需要在applicationContext.xml配置文件里面开启注解配置,开启方式如下:

1.头部声明需加入
xmlns:context=""
 

2.文件内部配置

<context:annotation-config />  <!--打开注解模式 -->
<context:component-scan base-package="com.newer" />

<!-- 开启自动扫描Bean,一般配到基础包即可。使用这个可以不配置-打开注解模式 -->

Bean注解管理
Spring自动扫描管理Bean注解有四种配置模式,如下
@Service    
用于业务层(service) 示例:@Service("baseService")
@Controller 
用于控制层(action)  示例:@Controller("baseAction")
@Repository 
用于数据访问层(dao) 示例:@Repository("baseDao")
@Component  
泛型配置(当组件不确定时用),以上3种配置是基于此扩展
推荐不同分层采用对应的配置,切忌所有配置都使用@Component

 

Spring事物注解配置

<!-- xml@事务配置 -->
<bean id="hibernateTransaction" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
<tx:annotation-driven transaction-manager="hibernateTransaction"proxy-target-class="true" />

@Transactional           //默认事务配置

@Transactional(rollbackFor=Exception.class) //出现Exception异常也回滚
@Transactional(noRollbackFor=Exception.class) //
出现Exception异常不回滚
@Transactional(readOnly=true) //
只读,性能优化,效率高
@Transactional(propagation=Propagation.NOT_SUPPORTED)  //
不开启事务
@Transactional(propagation=Propagation.REQUIRED) //
如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED) //
容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) //
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY) //
必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER) //
必须在一个没有的事务中执行,否则抛出异常(Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) //
如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
@Transactional(propagation=Propagation.NESTED)
@Transactional(propagation = Propagation.REQUIRED,readOnly=true)//readOnly=true
只读,不能更新,删除
@Transactional(propagation = Propagation.REQUIRED,timeout=30)//
设置超时时间
@Transactional(propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//
设置数据库隔离级别

注解事务是可以依赖类继承而继承的,例如某个service继承了baseService,那么它也会继承baseService的事物声明

屌丝们可以根据不同需求配置不同事物传播属性,下面是常见的事物隔离级别和传播属性:

1.事务的隔离级别

DEFAULT

采用数据库默认隔离级别

READ_UNCOMMITTED

读未提交数据( 会出现脏读,不可重复读,幻读 ,避免了第一类丢失更新 )

READ_COMMITTED

读已提交的数据(会出现不可重复读,幻读)

REPEATABLE_READ

可重复读(会出现幻读)

SERIALIZABLE

 

 

 

 

 

 

 

2. 事务的传播属性

REQUIRED

需要事务,存在:加入,不存在:自己创建.这是spring默认的传播行为.

SUPPORTS

支持事务, 存在:加入,不存在:不使用事务

MANDATORY

只能在一个已存在事务中执行,业务方法不能发起自己的事务,如果业务方法在没有事务的环境下调用,就抛异常

REQUIRES_NEW

业务方法总是会为自己发起一个新的事务,如果方法已运行在一个事务中,则原有事务被挂起,新的事务被创建,直到方法结束,新事务才结束,原先的事务才会恢复执行.

NOT_SUPPORTED

声明方法需要事务,如果方法没有关联到一个事务,容器不会为它开启事务.如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行.

PROPAGATION_NEVER

声明方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常.只有没关联到事务,才正常执行.

NESTED

嵌套事务(一般数据库不支持)

 

Action注解单例问题

交有spring管理后,action默认是单例模式。但是项目不能全部都采用单例,使用我们需要加入相关注解切换为非单例:
action上面配置,@Scope("prototype"),每个请求都会new一个新的实例

 

Bean初始化执行配置(服务器启动时就执行)

要想在bean初始化的时候就执行某个方法可使用注解@PostConstruct,同样有初始化就有结束@PreDestroy
@PostConstruct
public void init(){
 System.out.println("
初始化执行方法");
}

@PreDestroy

public void destory(){
 System.out.println("关闭资源");
}

 

 

 

 

转载地址:http://dfjdi.baihongyu.com/

你可能感兴趣的文章
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
漂亮的代码,糟糕的行为——解决Java运行时的内存问题
查看>>
Java的对象驻留
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>