• 详解SSH注解配置,bean注解、事物注解等


    使用过SSH注解的屌丝们都知道,要想使用注解需要在applicationContext.xml配置文件里面开启注解配置,开启方式如下:
    1.头部声明需加入
    xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd

    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("关闭资源");
    }

    推荐单例模式使用,如果bean类配置@Scope("prototype") 那该bean类只有在调用是才被初始化,
    相当于init方法也只能在bean被调用是才执行,而且bean的每次调用都会执行
    转,初始化执行的详细,及xml配置介绍:http://blog.csdn.net/ypl9935250/article/details/7013231

  • 相关阅读:
    PHP+ajaxfileupload与jcrop插件结合 完成头像上传
    MySQL字符集设置及字符转换(latin1转utf8)
    sysbench的安装和做性能测试
    MySQL字符集的一个坑
    MySQL执行计划解读
    启动InnoDB引擎的方法
    查询当前使用的默认的存储引擎
    Mysql技术内幕——InnoDB存储引擎
    Oracle Golden Gate原理简介
    在系统启动时,Windows Vista 中、 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TIME_WAIT 状态的所有 TCP/IP 端口
  • 原文地址:https://www.cnblogs.com/mgzy/p/3904334.html
Copyright © 2020-2023  润新知