<?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"
								
									 xsi:schemaLocation="http:
								
									 http:
								
									 http:
								
									 http:
								
									 <!-- 配置spring的IOC,把service对象配置进来-->
								
									 <bean id="accountSevice" class="com.mingqi.services.impl.AccountServicesImpl"></bean>
								
									 <!-- spring 中基于xml的Aop配置步骤
								
									  1、把通知Bean也交给spring来管理
								
									  2、使用aop:config标签表名开始aop的配置
								
									  3、使用aop:aspect标签表明配置切面
								
									  id属性:是给切面提供一个唯一标识
								
									  ref属性:是指定通知类的id
								
									  4、在aop:aspect标签的内部使用对应的标签来配置通知的类型
								
									  我们现在的示例是让printlog方法在切入点方法执行之前执行,所以是前置通知
								
									  aop:before:标识前置通知
								
									  method属性: 用于指定Logger类中的方法哪个是前置通知
								
									  pointcut属性: 用于指定切入点表达式,该表达式的含义指的是对业务层中的哪些方法增强
								
									  切入点表达式的写法:
								
									   关键字:execution(表达式)
								
									   表达式: 访问修饰符 返回值 包名.包名.包名....类名.方法名(参数列表)
								
									   标准的写法: public void com.mingqi.service.impl.AccountServiceImpl.saveAccount()
								
									   访问修饰符可以省略:void com.mingqi.service.impl.AccountServiceImpl.saveAccount()
								
									   返回值可以使用通配符,标识任意返回值:* com.mingqi.service.impl.AccountServiceImpl.saveAccount()
								
									   包名可以使用通配符,表示任意包,但是有几级包就需要写几个* *.*.*.*.*.AccountServiceImpl.saveAccount()
								
									   包名可以使用..代表当前包及其子包:* *.AccountServiceImpl.saveAccount()
								
									   类名和方法名都可以使用*来实现统配 * *..*.*();
								
									   参数列表: 可以直接写数据类型:
								
									     基本类型直接写名称:int
								
									     引用类型写包名.类名的方式: java.lang.String
								
									    可以使用通配符来标识任意类型,单必须有参数
								
									    可以使用..标识有无参数均可,有参数可以是任意类型
								
									 
								
									   全通配写法:
								
									   * *..*.*(..)
								
									   实际开发中 切入点表达式的通常写法:
								
									    切到业务层实现类的所有方法,* com.mingqi.service.impl.*.*(..);
								
									  -->
								
									 <!-- 配置Logger类-->
								
									 <bean id="logger" class="com.mingqi.utils.Logger"></bean>
								
									 <!--使用aop:config标签表名开始aop的配置-->
								
									 <aop:config>
								
									  <aop:pointcut id="pt1" expression="execution(* com.mingqi.services.impl.*.*(..))"></aop:pointcut>
								
									  <!--使用aop:aspect标签表明配置切面-->
								
									  <aop:aspect id="LogAdvice" ref="logger">
								
									   <!-- 配置前置通知:在切入点方法执行之前执行
								
									   <aop:before method="beforePrintLog" pointcut-ref="pt1"></aop:before>-->
								
									 
								
									   <!-- 配置后置通知:在切入点方法正常执行之后值。它和异常通知永远只能执行一个
								
									    <aop:after-returning method="afterReturningPrintLog" pointcut-ref="pt1"></aop:after-returning>-->
								
									   <!-- 配置异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个
								
									    <aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt1"></aop:after-throwing>-->
								
									   <!-- 配置最终通知:无论切入点方法是否正常执行它都会在其后面执行
								
									   <aop:after method="afterPrintLog" pointcut-ref="pt1"></aop:after>-->
								
									   <!-- 配置环绕通知 详细的注释请看Logger类中-->
								
									   <aop:around method="aroundPringLog" pointcut-ref="pt1"></aop:around>
								
									   </aop:aspect>
								
									  </aop:config>
								
									 </beans>