#####动态代理: 在原有代码的基础上通过增强代码,来实现新的功能。AOP的核心就是动态代理。先编写核心业务层,然后利用AOP来增强核心业务层的代码,以降低耦合。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354<!-- 配置Spring的IOC,把Service对象配置进来--> <bean id = "accountService" class="com.gao.service.impl.AccountServiceImpl"></bean><!-- Spring中基于XML的AOP配置步骤 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.gao.service.impl.AccountServiceImpl.saveAccount() 访问修饰符可以省略 void com.gao.service.impl.AccountServiceImpl.saveAccount() 返回值可以使用通配符,表示任意返回值 * com.gao.service.impl.AccountServiceImpl.saveAccount() 包名可以使用通配符,表示任意包。但是有几级包就需要写几个* * *.*.*.*.AccountServiceImpl.saveAccount() 包名可以使用..表示当前包以及其子包 * *..AccountServiceImpl.saveAccount() 类名和方法名都可以使用*来实现通配 * *..*.*() 参数列表: 可以直接写数据类型: 基本类型直接写名称 int 引用类型写包名.类名的方式 java.lang.String 可以使用*表示任意类型,但是必须有参数 可以使用..表示有误参数均可,有参数可以是任意类型 全通配写法: * *..*.*(..) 实际开发中切入点表达式的通常写法: 切到业务层实现类下的所有方法 * com.gao.service.impl.*.*(..) --><!-- 配置Logger类--> <bean id="logger" class="com.gao.utils.Logger"></bean><!-- 配置AOP--> <aop:config><!-- 配置切面--> <aop:aspect id="logAdvice" ref="logger"><!-- 配置通知的类型,并且建立通知方法和切入点方法的关联--> <aop:before method="printLog" pointcut="execution(* *..*.*(int))"></aop:before> </aop:aspect> </aop:config></beans> 文章作者: PhenoGao文章链接: http://xonlab.com/2020/02/06/AOP%E4%B8%AD%E7%9A%84%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XonLab!SpringJava后端上一篇Vue入门下一篇《浪潮之巅》12-13章 相关推荐 2020-01-19Spring使用Junit单元测试 2020-01-20Spring中的新注解 2020-01-17Spring创建Bean详解 2020-01-18在Spring中和Bean有关的注解 2020-01-13SpringBoot与数据访问 2020-02-10SpringBoot-Web开发基础