今天给大家总结一下,我今天学习的spring配置AOP的步骤,通常在事务管理经常用到这些配置,他比动态代理实现事务控制简单的多。 项目的目录结构如上图,bean.xml配置文件的内容如下 <!-- 配置Spring的IOC,把service对象配置进来--> <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean> <!-- Spring中基于XML的配置步骤 1. 把通知Bean也交给Spring来管理 2. 使用aop:config标签开始AOP的配置 3. 使用aop:aspect标签表明配置切面 id属性:是给切面提供一个唯一标识 ref属性:是指定通知类bean的id 4. 在aop:aspect标签的内部使用对应标签来配置通知的类型 我们现在的实例是让printLog方法在切入点方法之前执行,所以是前置通知 aop:before:表示配置前置通知 method属性:用于指定Logger类中哪个方法是前置通知 pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强 切入点表达式的写法: 关键字:execution(表达式) 表达式: 访问修饰符 返回值 包名.包名.包名.包名... 类名.方法名(参数) 标准的写法: public void com.itheima.service.impl.AccountServiceImpl.saveAccount() 访问修饰符可以忽略 void com.itheima.service.impl.AccountServiceImpl.saveAccount() 返回值可以用通配符表示 * com.itheima.service.impl.AccountServiceImpl.saveAccount() 包名可以使用通配符,表示任意包。但是有几级包,就需要写几个* * *.*.*.*.AccountServiceImpl.saveAccount() 包名可以使用..表示当前包或者子包 * *..AccountServiceImpl.saveAccount() 类名和方法名都可以用*来实现通配 * *..*.saveAccount() 参数列表: 可以直接写数据类型,基本类型直接写 int; 引用类型用包名.类名的方式 java.lang.String * *..*.saveAccount() 可以使用通配符代表参数,但只能表示有参数的 可以使用..代表可有可无的参数,有参数可以是任意类型 全通配写法: * *..*.*(..) 实际开发中切入点表达式的通常写法: 切到业务层实现类下的所有方法 * com.itheima.service.impl.*.*(..) --> <!-- 配置logger类--> <bean id="logger" class="com.itheima.util.logger"></bean> <!-- 配置AOP--> <aop:config> <!-- 配置切面--> <aop:aspect id="logAdvice" ref="logger"> <!-- 配置通知类型,并且建立通知方法和切入点方法的关联--> <aop:before method="printLog" pointcut="execution(* com.itheima.service.impl.*.*(..) )"></aop:before> </aop:aspect> </aop:config>