SSM整合:Spring XML文件

SSM整合可能用到的XML文件:
》数据库注解文件扫描
》spring注解扫描
》Mapper扫描bean
》配置数据源
》配置工厂bean
》事务管理bean及切面
》SchemaBased方式组成切面
》Aspectj方式组成切面

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/cache
       http://www.springframework.org/schema/cache/spring-cache.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><!--设置自动注入-->

    <!--属性文件扫描-->
    <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>

    <!--配置注解扫描-->
    <context:component-scan base-package="com.lt.service.impl"></context:component-scan>

    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${user}"></property>
        <property name="password" value="${password}"></property>
    </bean>

    <!--配置工厂bean-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="typeAliasesPackage" value="com.lt.pojo"></property>
    </bean>

    <!--配置Mapper扫描bean-->
    <bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--如果使用sqlSessionFactory,则会导致properties文件还没加载,就实例化了,导致出错-->
        <property name="sqlSessionFactoryBeanName" value="factory"></property>
        <property name="basePackage" value="com.lt.mapper"></property>
    </bean>

    <!--配置事务管理bean-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"></property>
    </bean>

    <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--那些方法需要有事务控制,支持通配符*
                readonly="true" 是否是只读事务,如果为true,则告诉数据库此事务为只读数据,对性能有一定提升,所以只要是查询方法,建议使用只读事务
                如果未false(默认值) 则说明事务需要提交-->
            <!--
            propagation=""
            事务传播行为:
                - required(默认值) 如果当前有事务,就在事务中执行,如果没有事务,新建一个事务
                - supports:如果当前有事务就在事务中执行,如果当前没有事务,就在非事务状态下执行
                - mandatory:必须在事务内部执行,如果当前有事务,就在事务中执行,如果当前没有事务,则报错
                - requires_new:必须在事务中执行,如果当前没有事务,则新建事务,如果当前有事务,把当前事务挂起,并开启一个新的事务
                - not_supported:必须在非事务状态下执行,如果当前没有事务,正常执行,如果当前有事务,把当前事务挂起
                - never:必须在非事务状态下执行,如果当前没有事务,正常执行,如果当前有事务,报错
                - nested:必须在事务状态下执行,如果没有事务,新建事务,如果有事务,创建一个嵌套事务
            -->
            <!--
            isolation=""
            事务隔离级别:
                事务隔离级别(4种):为了解决上边提及的并发问题,主流关系型数据库都会提供四种事务隔离级别。
                 - 读未提交(Read Uncommitted):可能会造成脏读、不可重复读、幻读
                - 读已提交(Read Committed):可能会导致不可重复读、幻读
                - 可重复读(Repeatable Read):Mysql默认事务隔离级别,避免了脏读和不可重复读,但是有可能会造成幻读。
                        》造成幻读的原因:mysql的《持续非锁定读》,它的多版本化来给一个查询展示某个时间点处数据库的快照。查询看到在那个时间点之前被提交的那些确切事务做的更改,并且没有其后的事务或未提交事务做的改变。这个规则的例外是,查询看到发布该查询的事务本身所做的改变。这个例外导致了可能会发生幻读。
                        A事务中读取两次(select * from table_A),在第一次读取之后,在第二次读取之前,事务B插入到table_A中一条数据,这个时候,读取的依旧是原先的快照,但是如果在事务A读取第二次之前,事务A做了增删改操作,这时候就会导致快照更新,事务A读取第二次就会是新的快照,再次查询(select * from )时 ,所得到的集合就和第一次不一致了。
                - Serializable(可序列化、可串行):提供严格的事务隔离级别,事务执行一个接着一个的执行,不能并发。仅仅通过行级锁是无法实现序列化的
            -->
            <tx:method name="sel*" read-only="true"/>
            <tx:method name="ins*"/>
            <tx:method name="up*"/>
            <tx:method name="del*"/>
        </tx:attributes>
    </tx:advice>

    <!--配置事务管理切面-->
    <aop:config>
        <aop:pointcut id="mp" expression="execution(* com.bjsxt.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="mp"></aop:advisor>
    </aop:config>


    <!--Aop组装:SchemaBased方式的配置-->
    <bean id="before" class="com.lt.advice.MyAdviceMethodBeforeAdvice"></bean>
    <bean id="after" class="com.lt.advice.MyAdviceAfterReturningAdvice"></bean>
    <bean id="round" class="com.lt.advice.MyAdviceMethodInterceptor"></bean>
    <bean id="myThrow" class="com.lt.advice.MyThrow"></bean>
    <!--aop组装规则-->
    <aop:config>
        <aop:pointcut id="point" expression="execution(* com.lt.service.impl.UserInfoServiceImpl.userLogin(..))"/>
        <aop:advisor advice-ref="before" pointcut-ref="point"></aop:advisor>
        <aop:advisor advice-ref="after" pointcut-ref="point"></aop:advisor>
        <aop:advisor advice-ref="round" pointcut-ref="point"></aop:advisor>
        <!--异常通知-->
        <aop:advisor advice-ref="myThrow" pointcut-ref="point"></aop:advisor>

    </aop:config>


    <!--Spring AOP配置:Aspectj方式-->
    <!--    配置切点bean-->
    <bean id="us" class="com.lt.service.impl.TestServiceImpl"></bean>
    <!--    配置通知bean-->
    <bean id="advice" class="com.lt.advice.MyAdvice"></bean>
    <!--    组装切面-->
    <aop:config>
        <aop:aspect ref="advice">
            <aop:pointcut id="my" expression="execution(* com.lt.service.impl.TestServiceImpl.point(String,int)) and args(name,age)"></aop:pointcut>
            <aop:pointcut id="my1" expression="execution(* com.lt.service.impl.TestServiceImpl.point(String,int))"></aop:pointcut>

            <aop:before method="testBefore" pointcut-ref="my" arg-names="name,age"></aop:before>
            <aop:around method="testRound" pointcut-ref="my" arg-names="name,age"></aop:around>
            <!--            <aop:after method="testAfter" pointcut-ref="my"></aop:after>-->
            <aop:after-returning method="testAfter" pointcut-ref="my" arg-names="name,age"></aop:after-returning>

            <aop:after-throwing method="testException" pointcut-ref="my" arg-names="name,age"></aop:after-throwing>
        </aop:aspect>
    </aop:config>



</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值