聊一聊项目中的Spring(execution表达式)

栏目: Java · 发布时间: 6年前

内容简介:聊一聊项目中的Spring(execution表达式)

[一知半解,就是给自己挖坑],开篇先补充一下事务的相关知识。

编程式事务

所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务

管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。

声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

一般来说,项目开发中基本使用的都是声明式事务,要不配置XML,要不使用@Transactional注解。

applicationContext.xml:

<context:property-placeholder location="classpath:database.properties" />
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" >
		<property name="DriverClassName" value="${mysql.driverclass}"/>
        <property name="Url" value="${mysql.jdbcurl}"/>
        <property name="MaxActive" value="${MaxActive}"/>
        <property name="MinIdle" value="${MinIdle}"/>
        <property name="Filters" value="${Filters}"/>
        <property name="TimeBetweenEvictionRunsMillis" value="${TimeBetweenEvictionRunsMillis}"/>
        <property name="Username" value="${mysql.user}"/>
        <property name="Password" value="${mysql.password}"/>
	</bean>
    <!-- 升级hibernate4 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- 统一导入hbm.xml文件 -->
		<property name="mappingLocations">
			<list>
				<value>classpath:com/acts/web/*/model/*.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!-- 1代表 true,0代表false 自动转换 -->
                <prop key="hibernate.query.substitutions">true=1,false=0</prop>
                <prop key="jdbc.use_scrollable_resultset">false</prop>
                <prop key="hibernate.current_session_context_class">
                    org.springframework.orm.hibernate4.SpringSessionContext
                </prop>
            </props>
        </property>
	</bean>
	
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="check*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
			<tx:method name="change*" propagation="REQUIRED" />
			<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->  
			<tx:method name="*" propagation="REQUIRED" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<aop:config proxy-target-class="true">
		<aop:pointcut id="allServiceMethod" expression="execution(* com.acts.*.*.service..*.*(..))" />
		<aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
	</aop:config>

好,说了这么多,言归正传说一下配置中的execution。

execution(* com.acts. . .service.. . (..)) 解释如下: 符号 含义 execution() 表达式的主体; 第一个” “符号 表示返回值的类型任意; com.acts. . .service AOP所切的服务的包名,即,我们的业务部分 包名后面的”..“ 表示当前包及子包 第二个” “ 表示类名, 即所有类。此处可以自定义,下文有举例 . (..) 表示任何方法名,括号表示参数,两个点表示任何参数类型


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

两周自制脚本语言

两周自制脚本语言

[日]千叶 滋 / 陈筱烟 / 人民邮电出版社 / 2014-6 / 59.00元

《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。 《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经......一起来看看 《两周自制脚本语言》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具