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

西三环路网站建设网站建设需要几个人

西三环路网站建设,网站建设需要几个人,一台主机做两个网站,莱芜做网站公司前言 接触过Spring的都知道#xff0c;aop是其中重要的特性之一。笔者在开发做项目中#xff0c;aop更多地是要和注解搭配#xff1a;在某些方法上加上自定义注解#xff0c;然后要对这些方法进行增强(很少用execution指定#xff0c;哪些包下的哪些方法要增强)。那这时就…前言 接触过Spring的都知道aop是其中重要的特性之一。笔者在开发做项目中aop更多地是要和注解搭配在某些方法上加上自定义注解然后要对这些方法进行增强(很少用execution指定哪些包下的哪些方法要增强)。那这时就要引出annotation、target、within了。我们一一讲解。 annotation 方法上是否有指定注解子类调用不重写的方法会被aop拦截调用重写的方法看是否加了指定注解。 首先引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactIdversion2.7.4/version /dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdversion2.7.4/versionscopetest/scope /dependency自定义一个注解 import java.lang.annotation.Target; import java.lang.annotation.*;Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Outer {int limit() default 0;}目标类 import org.springframework.stereotype.Component;Component public class Target {Outer(limit 8)public void invoke() {System.out.println(执行Target的方法);}}Component public class SonTarget extends Target {}切面类 import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method;Component Aspect public class MyAspect {Around(annotation(com.gs.spring_boot_demo.aop.Outer))public Object around(ProceedingJoinPoint point) throws Throwable {Method method ((MethodSignature)point.getSignature()).getMethod();Outer outer method.getAnnotation(Outer.class);System.out.println(aop前置 outer.limit());return point.proceed();}}编写测试类 import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.junit.jupiter.api.Test;SpringBootTest public class AopTest {Resourceprivate Target target;Autowiredprivate SonTarget sonTarget;Testpublic void aop() {target.invoke();System.out.println(---);sonTarget.invoke();}}运行aop方法打印结果 把子类SonTarget修改一下 import org.springframework.stereotype.Component;Component public class SonTarget extends Target {public void invoke() {System.out.println(子类执行Target的方法);}}再次运行测试类这时子类的invoke()方法不会被拦截了 当然如果SonTarget的invoke()方法上加上Outer那就能被aop拦截了。 target 调用方法的对象所属的类上是否有指定注解注解被Inherited修饰子类调用会生效无Inherited看子类上有无该注解。 自定义注解不动目标类修改为 import org.springframework.stereotype.Component;Component Outer(limit 8) public class Target {public void invoke() {System.out.println(执行Target的方法);}}import org.springframework.stereotype.Component;Component public class SonTarget extends Target {public void invoke() {System.out.println(子类执行Target的方法);}}切面类修改为 import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method;Component Aspect public class MyAspect {/*** 要注意一下target很硬霸所有的bean都会被动态代理(不管类上有没有加自定* 义注解)所以要约束为本项目下的包下* 不然测试用例运行时会报错依赖中有些类是final的被动态代理会报错*/Around(target(com.gs.spring_boot_demo.aop.Outer) within(com.gs.spring_boot_demo..*))public void around(ProceedingJoinPoint point) throws Throwable {Method method ((MethodSignature)point.getSignature()).getMethod();Outer outer method.getDeclaringClass().getAnnotation(Outer.class);System.out.println(aop前置 outer.limit());point.proceed();}}测试类不动运行 SonTarget的invoke()没有被拦截想要被拦截就在SonTarget类上添加Outer或者自定义注解上增加Inherited(表明父类加上该注解后子类能够继承) import java.lang.annotation.Target; import java.lang.annotation.*;Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited public interface Outer {int limit() default 0;}within 方法所属的类上是否有指定注解注解没有被Inherited修饰子类调用不重写的方法会被拦截调用重写的方法看子类上是否有注解注解被Inherited修饰子类调用方法都会被拦截不管是否重写 自定义注解改一下就把修饰它的Inherited去掉   目标类 import org.springframework.stereotype.Component;Component Outer(limit 8) public class Target {public void invoke() {System.out.println(执行Target的方法);}}import org.springframework.stereotype.Component;Component public class SonTarget extends Target {}切面类修改为 import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method;Component Aspect public class MyAspect {Around(within(com.gs.spring_boot_demo.aop.Outer))public void around(ProceedingJoinPoint point) throws Throwable {Method method ((MethodSignature)point.getSignature()).getMethod();Outer outer method.getDeclaringClass().getAnnotation(Outer.class);System.out.println(aop前置 outer.limit());point.proceed();}}测试类不动运行 子类的方法能被拦截我们把子类的方法重写一下 import org.springframework.stereotype.Component;Component public class SonTarget extends Target {public void invoke() {System.out.println(子类执行Target的方法);}}再次运行测试类打印出结果 子类的方法没有被拦截想要被拦截SonTarget类上加上Outer。 我们再试一下自定义注解被Inherited修饰的情况。Outer注解加上Inherited然后Target不动SonTarget也不动(重写了invoke()方法类上也没有Outer)运行测试类 SonTaget改一下不重写invoke()方法运行测试类
http://www.dnsts.com.cn/news/110186.html

相关文章:

  • 如何做好企业网站建设微信网站链接怎么做
  • 公司网站建设需求分析手机照片做成音乐相册
  • 新八建设集团网站做信息发布网站要多少钱
  • 落地页需要建网站吗营销型网站的推广
  • 网站开发核心技术wordpress 建多站
  • 中国建设银行官网站哈南分理处wordpress 自动图片
  • 网站免费建站pixiv app潍坊高端网站建设公司
  • 人人商城网站开发建设银行u盾用网站打不开
  • 网站推广的方法及技巧WordPress移动端小工具
  • 中国建设银官方网站wordpress 源码下载主题
  • 北京网站建设技术托管100深夜看黄禁用免费
  • 综合购物网站建站网站开发实践意义
  • 河南省专业做网站公司昆明网站建设工作室
  • 石家庄哪里有网站推广中小型网站建设案例
  • 网站建设企业模板下载神马快速排名优化工具
  • 网站建设代理嘉兴建设局网站
  • 片网站无法显示投放广告赚钱平台有哪些
  • 郑州网站建设xinsu360厦门谷歌seo公司有哪些
  • 做网站怎么开发程序网站建设设计策划
  • 公司网站可以不备案吗网页设计报价标准
  • 企业网站策划大纲模板wordpress免费企业模板下载
  • 建wap网站精简网站模板
  • 做网站花多钱做网站上传那个目录
  • 推荐几个好的seo网站程序模板html网站头部如何制作
  • 推广网站的步骤有账号和密码怎么进公司网站后台
  • 网站做3儿童车开场动画内蒙古乌海建设局网站
  • 免费一百个空间访客领取网站嘉定做网站的
  • 2016做砸了的小网站俄罗斯乌克兰克里米亚
  • 网站策划应该怎么做网站建设微信商城开发
  • 美食杰网站的建设目的公司排名seo