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

网站用户体验评价方案在电脑上怎么做网站

网站用户体验评价方案,在电脑上怎么做网站,网站会员收费怎么做,免费搭建贴吧系统网站说明 说到对类方法增强,第一时间想到自定义注解,通过aop切面进行实现。这是一种常用做法,但是在某些场景下,如开发公共组件,定义aop切面可能不是最优方案。以后通过原生aop方式,自定义注解,对类…

说明

说到对类方法增强,第一时间想到自定义注解,通过aop切面进行实现。这是一种常用做法,但是在某些场景下,如开发公共组件,定义aop切面可能不是最优方案。以后通过原生aop方式,自定义注解,对类方法进行增强。

实现

自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CustomStat {
}

自定义切点

/*** 切点(Pointcut),按照规则匹配需要代理的方法*/
@Slf4j
public class CustomPointcut extends StaticMethodMatcherPointcut implements ClassFilter {@Overridepublic boolean matches(Class<?> clazz) {boolean contains = clazz.getName().contains("com.spring.demo.service");if (contains) {log.info("CustomPointcut:{}",clazz.getName());}return contains;}@Overridepublic boolean matches(Method method, Class<?> targetClass) {boolean contains = targetClass.getName().contains("com.spring.demo.service");if (contains) {log.info("CustomPointcut:{}",targetClass.getName());}return contains;}
}

自定义增强器

public class CustomAnnotationAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware, Ordered {private Advice advice;private Pointcut pointcut;private MethodInterceptor methodInterceptor;public CustomAnnotationAdvisor(MethodInterceptor methodInterceptor) {this.methodInterceptor = methodInterceptor;this.advice = buildAdvice();this.pointcut = buildPointcut();}@Overridepublic Pointcut getPointcut() {return this.pointcut;}@Overridepublic Advice getAdvice() {return this.advice;}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {if (this.advice instanceof BeanFactoryAware) {((BeanFactoryAware) this.advice).setBeanFactory(beanFactory);}}protected Advice buildAdvice() {return methodInterceptor;}protected Pointcut buildPointcut() {//构建切点Pointcut cpc = new AnnotationMatchingPointcut(CustomStat.class, true);Pointcut mpc = AnnotationMatchingPointcut.forMethodAnnotation(CustomStat.class);return new ComposablePointcut(cpc).union(mpc);}@Overridepublic int getOrder() {return Integer.MAX_VALUE;}
}

其中构造参数中的MethodInterceptor为最终代理拦截器

自定义拦截器

@Slf4j
@Component
public class CustomAnnotationInterceptor implements MethodInterceptor {@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {//调用的方法和参数//Method method = invocation.getMethod();// Object[] arguments = invocation.getArguments();log.info("start-注解aop拦截器");Object proceed = invocation.proceed();log.info("end-注解aop拦截器");return proceed;}
}

注册增强器

@Component
public class CustomAnnotationBeanPostProcessor extends AbstractAdvisingBeanPostProcessor implements BeanFactoryAware {@Resourceprivate CustomAnnotationInterceptor customAnnotationInterceptor;@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {setBeforeExistingAdvisors(true);CustomAnnotationAdvisor advisor = new CustomAnnotationAdvisor(customAnnotationInterceptor);advisor.setBeanFactory(beanFactory);this.advisor = advisor;}
}

测试

    @Override@CustomStatpublic void printWork() {System.out.println("WorkServiceImpl1");}

结果

2024-05-21 08:55:26.486  INFO 41351 --- [nio-8081-exec-5] c.s.d.a.CustomAnnotationInterceptor      : start-注解aop拦截器
WorkServiceImpl1
2024-05-21 08:55:26.486  INFO 41351 --- [nio-8081-exec-5] c.s.d.a.CustomAnnotationInterceptor      : end-注解aop拦截器
http://www.yayakq.cn/news/581679/

相关文章:

  • 怎样做google网站合肥建设集团信息网站
  • 互联网站建设 天津深圳网站建设怎样快速
  • 网站设置字体样式乐山做美食推荐的网站
  • 网站400惠州网站建设方案外包
  • 品牌网站建设小科6蚪云南省建设厅建筑业信息网
  • 做网站的程序员留备份兴义市住房和城乡建设局网签网站
  • 金乡做网站大数据做网站
  • 正规免费网站建设公司wordpress的静态页面保存在哪里
  • 企业网站免费推广软件买一个网站多少钱
  • 最新的网站建设架构手机网站生产app
  • 做哪些网站可以赚钱的北京展柜设计制作公司
  • 商业网站建设开发wordpress加载html
  • 网站 首页 关键词好视通视频会议app下载
  • 西安有哪些做网站建设的公司网站设计怎么做视频
  • 淘客网站怎么做排名小程序什么样才能移到微信上
  • 龙岩做网站开发要多久wordpress怎么安装asp主题
  • 做单页网站容易排名吗网站建设规模与类别
  • 网站制作咨询钙网logo设计免费
  • 网站域名注册申请北京建设厅官方网站
  • 做图片网站侵权吗手机端网站设计模板
  • 扁平化风格 网站网站流量好难做
  • 网站 空间费用网络服务类型有哪几种
  • 盐山网站建设价格做棋牌网站建设
  • ps软件网站有哪些功能wordpress 百度文库
  • 河南省中原建设有限公司网站wordpress前台
  • 宁波cms模板建站岳阳设计网站推荐
  • 北京专业网站设计推荐django 做网站
  • 手机建设银行网站首页少儿编程课网课哪个好
  • 做旅游的网站那个便宜北京商会网站建设
  • 网站建设纟金手指下拉壹陆网站商城怎么做