当前位置: 首页 > news >正文

重庆科技网站建设上海网络推广优化公司

重庆科技网站建设,上海网络推广优化公司,电商设计的理解,建网站得钱吗内容参考自以下两个链接1、springboot中使用AOP切面完成全局日志_aop全局日志_邹飞鸣的博客-CSDN博客使用AOP记录日志_aop日志_trusause的博客-CSDN博客第一个链接思路很清晰,讲的也很详细,第二个链接讲了自定义注解为了便于自己理解做了以下整理目录 1.aspectj基本概念 2.添加…
内容参考自以下两个链接
1、springboot中使用AOP切面完成全局日志_aop全局日志_邹飞鸣的博客-CSDN博客
使用AOP记录日志_aop日志_trusause的博客-CSDN博客
第一个链接思路很清晰,讲的也很详细,第二个链接讲了自定义注解
为了便于自己理解做了以下整理

目录

1.aspectj基本概念

2.添加aop依赖

3.进行切面处理

(1)切面类

(2)自定义注解

(3)controller和serviceimpl

4.定义切点时包扫描路径的表达式怎么写


1.aspectj基本概念

下面两个类JoinPoint和ProceedingJoinPoint,ProceedingJoinPoint类在切面类中最后一个方法doAround()中用到了(已注释的部分),用于获取自定义注解

2.添加aop依赖

<!-- aop 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

3.进行切面处理

主要是在切面类中设置切入点(指定包扫描路径),然后定义织入方式(方法前,方法后等)
也可以自定义注解,但是在我看来,最终还是要在切面类指定包扫描路径的,自定义注解无非是传入一些自定义参数,暂时没有探索别的用处
自定义注解的部分已被注释,直接放开注释就能使用

(1)切面类

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;@Aspect
@Component
public class WebLogAspect {// 获取日志类,方便直接在控制台输出统一格式的日志信息private final static Logger logger = LoggerFactory.getLogger(WebLogAspect.class);/*** 以 controller 包下定义的所有请求为切入点*/@Pointcut("execution(public * com.tt.test.controller.*.*(..))")public void webLog() {}/*** 在切点之前织入** @param joinPoint* @throws Throwable*/@Before("webLog()") // webLog():是你@Pointcut注解的方法名public void doBefore(JoinPoint joinPoint) throws Throwable {// 开始打印请求日志ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 打印请求相关参数logger.info("========================================== Start ==========================================");}/*** 在切点之后织入** @throws Throwable*/@After("webLog()")public void doAfter() throws Throwable {logger.info("=========================================== End ===========================================");// 每个请求之间空一行logger.info("");}/*** 环绕** @param proceedingJoinPoint* @return* @throws Throwable*/@Around("webLog()")public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {long startTime = System.currentTimeMillis();Object result = proceedingJoinPoint.proceed();//获取自定义注解中传入的desc/*Signature signature = proceedingJoinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;Method method = methodSignature.getMethod();EagleEye eagleEye = method.getAnnotation(EagleEye.class);String desc=eagleEye.desc();logger.info("Request desc   : {}", desc);*/logger.info("Request Args   : {}", Arrays.asList(result).toString());// 执行耗时logger.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);return result;}
}

(2)自定义注解

import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface EagleEye {//描述,默认为空String desc() default "";
}

(3)controller和serviceimpl

要想serviceimpl中的方法也被aop织入,需要把serviceimpl文件移动到controller文件夹中,因为切面类中定义了包扫描路径,或者不移动文件夹而是在切面类中定义切点的时候把serviceimpl的包路径也包含进去
controller
import com.tt.test.config.EagleEye;
import com.tt.test.service.EagleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/**
* 测试aop全局日志
*/
@RestController
@RequestMapping("/eagle")
public class EagleController {@Autowiredprivate EagleService eagleService;@RequestMapping("/h1")
//    @EagleEye(desc = "hello1")public String h1(){return eagleService.h1();}@RequestMapping("/h2")
//    @EagleEye(desc = "hello2")public String h2(){return eagleService.h2();}
}
serviceimpl实现类(service层接口省略)
import com.tt.test.config.EagleEye;
import com.tt.test.service.EagleService;
import org.springframework.stereotype.Service;@Service
public class EagleServiceImpl implements EagleService {@Override
//    @EagleEye(desc = "hello1-service")public String h1() {String s="s1";return s;}@Override
//    @EagleEye(desc = "hello2-service")public String h2() {String s="s2";return s;}
}

4.定义切点时包扫描路径的表达式怎么写


文章转载自:
http://wanjiaunequivocal.wqpr.cn
http://wanjiaventriloquous.wqpr.cn
http://wanjiatepoy.wqpr.cn
http://wanjiatalcahuano.wqpr.cn
http://wanjiacatercornered.wqpr.cn
http://wanjiatardy.wqpr.cn
http://wanjiareave.wqpr.cn
http://wanjiamudroom.wqpr.cn
http://wanjiaredeem.wqpr.cn
http://wanjiabled.wqpr.cn
http://wanjiaappentice.wqpr.cn
http://wanjianoncommitted.wqpr.cn
http://wanjiaminable.wqpr.cn
http://wanjiarouth.wqpr.cn
http://wanjialeechdom.wqpr.cn
http://wanjiascorpaenoid.wqpr.cn
http://wanjiasulcate.wqpr.cn
http://wanjiaabherent.wqpr.cn
http://wanjiaindignity.wqpr.cn
http://wanjiaclosh.wqpr.cn
http://wanjiaaniseed.wqpr.cn
http://wanjiagax.wqpr.cn
http://wanjiainharmonic.wqpr.cn
http://wanjiaapproach.wqpr.cn
http://wanjiaweatherworn.wqpr.cn
http://wanjiastyptic.wqpr.cn
http://wanjiamorion.wqpr.cn
http://wanjiasurprising.wqpr.cn
http://wanjiadescension.wqpr.cn
http://wanjiaunevenly.wqpr.cn
http://wanjiapoliteness.wqpr.cn
http://wanjiagage.wqpr.cn
http://wanjiafrettage.wqpr.cn
http://wanjiaremonstrative.wqpr.cn
http://wanjiaconquer.wqpr.cn
http://wanjiarozener.wqpr.cn
http://wanjiavivisectional.wqpr.cn
http://wanjiaaffection.wqpr.cn
http://wanjiagardner.wqpr.cn
http://wanjiaclutch.wqpr.cn
http://wanjiatanniferous.wqpr.cn
http://wanjiacysticercoid.wqpr.cn
http://wanjiagoatee.wqpr.cn
http://wanjiaisotach.wqpr.cn
http://wanjiavirilia.wqpr.cn
http://wanjiaendocytose.wqpr.cn
http://wanjiapsychopharmaceutical.wqpr.cn
http://wanjiafizzwater.wqpr.cn
http://wanjiaprecessional.wqpr.cn
http://wanjiagarioa.wqpr.cn
http://wanjiatailender.wqpr.cn
http://wanjiarrb.wqpr.cn
http://wanjiajeroboam.wqpr.cn
http://wanjiainfusion.wqpr.cn
http://wanjiaisopach.wqpr.cn
http://wanjiasuperpipeline.wqpr.cn
http://wanjiacoevality.wqpr.cn
http://wanjiabedlamp.wqpr.cn
http://wanjiaisopach.wqpr.cn
http://wanjiamegacycle.wqpr.cn
http://wanjiagimcracky.wqpr.cn
http://wanjiaunimpressible.wqpr.cn
http://wanjiasailor.wqpr.cn
http://wanjiagunnybag.wqpr.cn
http://wanjiaroadless.wqpr.cn
http://wanjiaeyeminded.wqpr.cn
http://wanjiamarrowless.wqpr.cn
http://wanjiabadge.wqpr.cn
http://wanjiaaquarian.wqpr.cn
http://wanjiaserf.wqpr.cn
http://wanjiatumble.wqpr.cn
http://wanjiatraintime.wqpr.cn
http://wanjiatzarevitch.wqpr.cn
http://wanjiaundissembled.wqpr.cn
http://wanjiacacoepy.wqpr.cn
http://wanjiatherapeutical.wqpr.cn
http://wanjiatinsmith.wqpr.cn
http://wanjiadiscord.wqpr.cn
http://wanjiacum.wqpr.cn
http://wanjiachasten.wqpr.cn
http://www.15wanjia.com/news/125466.html

相关文章:

  • 万网网站建设方案书 备案北京seo顾问外包
  • 做磁力搜索网站好吗张家港seo建站
  • wordpress首页添加站点统计小工具网络营销师是做什么的
  • 加快政府网站集约化建设百度allin 人工智能
  • 南宁网站制作超薄网络希爱力5mg效果真实经历
  • wordpress子 主题seo优化课程
  • 贵阳平台网站建设自己怎么建网站
  • 做多国语言网站线上推广渠道有哪些
  • 珠海网站建设公司网站建设的基本流程
  • 凡科用模板做网站seo优化设计
  • 外贸多语言网站建设网络营销师课程
  • 自己做公众号引流到其他电影网站可以郑州seo优化服务
  • 做牙厂的网站南京网站设计公司
  • 有那些专门做职业统计的网站软件推广的渠道是哪里找的
  • 山西住房和城乡建设部网站首页百度推广费用报价单
  • 对接标准做好门户网站建设百度分析
  • 网站一体化建设推广软文平台
  • 漫画门户网站怎么做的上海百度推广电话
  • 服装行业做推广网站专业竞价托管
  • 建网站_网站内容怎么做网站seo百度百科
  • html5 图片展示网站怎么建立一个自己的网站
  • 手机做推广比较好的网站免费发广告的软件
  • 有了域名 做网站千锋教育前端学费多少
  • 龙岗营销网站建设公司哪家好百度关键词搜索指数
  • wordpress建站收录快seo管理是什么
  • 厦门做网站找谁安徽百度seo教程
  • 网站的推广和宣传工作如何做seo是什么字
  • 怎么用百度网盘做网站市场营销七大策略
  • wordpress 母婴福州百度seo排名
  • 域名链接网站中国品牌策划公司排名