Spring AOP功能
2020-05-16 16:05:28来源:博客园 阅读 ()
Spring AOP功能
Spring核心思想之一是AOP(Aspect Oriented Programming),即面向切面编程的技术。 AOP让开发人员专注核心业务,而通用逻辑则由专人使用 AOP 技术进行横向切入处理,使得任务分离,提高开发和调试的效率,应用于权限管理、日志管理等。
假设项目已完成Spring、SpringMVC配置,添加AOP应用
1.applicationContext.xml开启支持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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 自动扫描与装配bean --> <context:component-scan base-package="com.product"></context:component-scan> <!-- 启动对@AspectJ注解的支持 --> <aop:aspectj-autoproxy/> <aop:aspectj-autoproxy proxy-target-class="true" /> </beans>
2.编写日志切面实现
2.1 定义日志注解类
@Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface AppLog { String value() default ""; }
2.2 日志功能
package com.product.aop; import java.util.Arrays; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 日志demo * * */ @Component @Aspect public class LogAspect { private static final Log logger = LogFactory.getLog(LogAspect.class); //抽取公共的切入点表达式 @Pointcut("@annotation(com.product.aop.AppLog)") public void pointCut() { }; //在目标方法之前切入 @Before("pointCut()") public void logStart(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); System.out.println("" + joinPoint.getSignature().getName() + "运行以前:参数列表是:{" + Arrays.asList(args) + "}"); } @After("com.product.aop.LogAspect.pointCut()") public void logEnd(JoinPoint joinPoint) { System.out.println("" + joinPoint.getSignature().getName() + "运行结束。"); } // JoinPoint在参数表的第一位 @AfterReturning(value = "pointCut()", returning = "result") public void logReturn(JoinPoint joinPoint, Object result) { System.out.println("" + joinPoint.getSignature().getName() + "返回运行结果:{" + result + "}"); } @AfterThrowing(value = "pointCut()", throwing = "exception") public void logException(JoinPoint joinPoint, Exception exception) { System.out.println("" + joinPoint.getSignature().getName() + "异常,信息:{" + exception + "}"); } }
3.业务功能引入切面
import org.springframework.stereotype.Service; import com.product.aop.AppLog; @Service("userService") public class UserService { /** * 标记日志注解 */ @AppLog public boolean exists(String userid,String name){ System.out.println("getUser"); return true; } }
4.测试
浏览器请求http://127.0.0.1:8080/aop/user/submit.do?userid=001&name=lilei
控制台输出结果:
exists运行以前:参数列表是:{[001, lilei]}
getUser
exists运行结束。
exists返回运行结果:{true}
原文链接:https://www.cnblogs.com/walkwithmonth/p/12901283.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash