AOP面向切面编程:
主要用于:日志、权限管理、事物;
1:自定义事务管理类:
方法执行之前,执行之后,抛出异常的时候分别可执行的操作:
代码:
spring-myAop.xml:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop 6 http://www.springframework.org/schema/aop/spring-aop.xsd"> 7 <!--引入日志管理类--> 8 <bean id="webAspectLog" class="com.day02.sation.aop.WebAspectLog"/> 9 <!--配置切面--> 10 <aop:config> 11 <!--日志aop--> 12 <aop:aspect ref="webAspectLog"> 13 <aop:pointcut id="pointcut" expression="execution(* com.day02.sation.controller.*Controller.*(..))"/> 14 <!--在方法执行之前执行--> 15 <aop:before method="beforeLog" pointcut-ref="pointcut"/> 16 <!--在方法执行之后执行--> 17 <aop:after method="XXX" pointcut-ref="pointcut"/> 18 <!--抛出异常的时候执行--> 19 <aop:after-throwing method="xxx2" pointcut-ref="pointcut"/> 20 <!-- 注意如果要获取执行后的结果 必须配置参数 returning="对象为afterLog方法的参数对象名称"--> 21 <aop:after-returning method="afterLog" pointcut-ref="pointcut" returning="returnObj"/> 22 </aop:aspect> 23 </aop:config> 24 </beans>
1-2 :当方法执行完后,不报内部代码错误的情况下,再提交事物,比如购买操作的时候,执行减少库存,增加订单,只有当执行2条sql语句同时执行成功的情况下,才执行,否则有一条执行不成功的情况,都执行失败:
spring主配置文件中的配置:
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!--aop事物--> 2 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 3 <property name="dataSource" ref="dataSource"/> 4 </bean> 5 <!-- 什么时候做 when --> 6 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 7 <tx:attributes> 8 <tx:method name="get*" read-only="true"/> 9 <tx:method name="query*" read-only="true"/> 10 <tx:method name="list*" read-only="true"/> 11 <tx:method name="list*" read-only="true"/> 12 <tx:method name="*"/> 13 </tx:attributes> 14 </tx:advice> 15 16 <!-- 什么地点做 where --> 17 <aop:config> 18 <aop:pointcut id="serviceOperation" expression="execution(* com.floor.shop.service.impl.*Service.*(..))"/> 19 <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> 20 </aop:config>