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

加强网站建设的通知网站建设心得小结

加强网站建设的通知,网站建设心得小结,湖南正规seo优化,赣州网上房地产官网前言 接触过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.hkea.cn/news/14425584/

相关文章:

  • 网站建设策划范文太原加盟网站制作
  • 建设网站需要什么设施超级装家装官网
  • 嘉定网站建设哪家好官方网站建设推广
  • 微信网站建设收费标准威海优化公司
  • 徐州社交网站做的网站百度没收录
  • 动易网站系统怎么样重庆网站制作多少钱
  • 个人网站 作品网站建设项目验收付款
  • 有经验的佛山网站设计姜堰网站建设
  • 做头像的网站空白798人像艺术区
  • 上海网站制作公司wordpress 本地ajax
  • 网站建设开发详细步骤流程滁州市建设局网站
  • 网站正在建设中 页面seo关键词如何布局
  • 可以查企业备案的网站吗wordpress怎么当站长
  • 跨境电商网站如何做推广企业网站改版
  • 做特卖的网站怎么赚钱hao123从网上开始
  • 国际金融资讯做的好的网站长丰县住房和建设局网站
  • 烟台网站建设-中国互联设计房子的平面图
  • 网站关键词的布局深圳南山建设局官方网站
  • 自己有网站 做app上海软装设计公司排名
  • 怎么做app和网站购物车网站内页做排名
  • 网站支付宝怎么做织梦只显示网站首页
  • 创建网站需要多少资金免费算命免费 生辰八字
  • 做那个免费视频网站潍坊网站建设优化
  • 网站 建设 维护 公司西安网站设计开发
  • 网站2级目录怎么做的做网站如何把栏目放到首页
  • 安阳做网站的地方上海市建设执业注册中心网站
  • 手机创建个人网站 免费设计网页时有哪些配色方法
  • 超炫酷网站欣赏涞源县住房和城乡建设局网站
  • 站长之家排行榜北京住房与城乡建设网站
  • 类似酷家乐做庭院的网站项目负责人质量建设厅官方网站