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

玉树电子商务网站建设公司小米发布会官网

玉树电子商务网站建设公司,小米发布会官网,宝应县网络推广公司,无锡 网站设计元注解 1.元注解1.1 Target1.2 Retention1.3 Inherited1.4 Documented1.5 interface 2.自定义注解2.1 创建自定义注解类2.2 实现业务逻辑2.3 使用自定义注解 1.元注解 元注解就是定义注解的注解#xff0c;是 Java 提供的用于定义注解的基本注解。 注解 说明 Retention是注解… 元注解 1.元注解1.1 Target1.2 Retention1.3 Inherited1.4 Documented1.5 interface 2.自定义注解2.1 创建自定义注解类2.2 实现业务逻辑2.3 使用自定义注解 1.元注解 元注解就是定义注解的注解是 Java 提供的用于定义注解的基本注解。 注解 说明 Retention是注解类实现声明类 Class声明类别 Category声明扩展 ExtensionTarget放在自定义注解的上边表明该注解可以使用的范围Inherited允许子类继承父类的注解在子类中可以获取使用父类注解Documented表明这个注释是由 Javadoc 记录的interface用来自定义注释类型 1.1 Target 该注解的作用是告诉 Java 将自定义的注解放在什么地方比如类、方法、构造器、变量上等。它的值是一个枚举类型有如下属性值。 ElementType.CONSTRUCTOR用于描述构造器。ElementType.FIELD用于描述成员变量、对象、属性包括 enum 实例。ElementType.LOCAL_VARIABLE用于描述局部变量。ElementType.METHOD用于描述方法。ElementType.PACKAGE用于描述包。ElementType.PARAMETER用于描述参数。ElementType.TYPE用于描述类、接口包括注解类型或 enum 声明。 1.2 Retention 该注解用于说明自定义注解的生命周期在注解中有三个生命周期。 RetentionPolicy.RUNTIME始终不会丢弃运行期也保留该注解可以使用反射机制读取该注解的信息。自定义的注解通常使用这种方式。RetentionPolicy.CLASS类加载时丢弃默认使用这种方式。RetentionPolicy.SOURCE编译阶段丢弃自定义注解在编译结束之后就不再有意义所以它们不会写入字节码。Override、SuppressWarnings 都属于这类注解。 1.3 Inherited 该注解是一个标记注解表明被标注的类型是可以被继承的。如果一个使用了 Inherited 修饰的 Annotation 类型被用于一个 Class则这个 Annotation 将被用于该 Class 的子类。 1.4 Documented 该注解表示是否将注解信息添加在 Java 文档中。 1.5 interface 该注解用来声明一个注解其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称返回值类型就是参数的类型返回值类型只能是基本类型、Class、String、enum。可以通过 default 来声明参数的默认值。 定义注解格式见以下代码 public interface 注解名{定义体}2.自定义注解 有时需要自定义注解来快捷地实现功能。本实例演示如何自定义注解以及实现业务逻辑处理。 2.1 创建自定义注解类 package com.example.demo;import org.springframework.stereotype.Component;import java.lang.annotation.*;Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Component public interface MyTestAnnotation {String value(); }代码解释如下。 使用 Target 注解标注作用范围。使用 Retention 注解标注生命周期。使用 Documented 将注解信息添加在 Java 文档中。 2.2 实现业务逻辑 以 AOP 的方式实现业务逻辑见以下代码 package com.example.demo;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component;import java.lang.reflect.Method;Aspect Component public class TestAnnotationAspect {// 拦截被 TestAnnotation 注解的方法如果需要拦截指定 package 指定规则名称的方法可以使用表达式 execution(...)Pointcut(annotation(com.example.demo.MyTestAnnotation))public void myAnnotationPointCut() {}Before(myAnnotationPointCut())public void before(JoinPoint joinPoint) throws Throwable {MethodSignature sign (MethodSignature) joinPoint.getSignature();Method method sign.getMethod();MyTestAnnotation annotation method.getAnnotation(MyTestAnnotation.class);// 获取注解参数System.out.print(打印TestAnnotation 参数 annotation.value());}}类注解 Aspect这是一个切面注解用于标记这个类为一个切面类。切面类包含了通知Advice定义了要在哪些连接点JoinPoint上执行的逻辑。Component这是一个组件注解用于将这个切面类注册为 Spring 容器中的一个组件以便 Spring 可以自动扫描并实例化它。 切入点表达式 Pointcut(annotation(com.example.demo.MyTestAnnotation))这是一个切入点Pointcut定义用于指定这个切面要拦截的操作。这里的切入点表达式表示拦截所有被 MyTestAnnotation 注解标记的方法。 通知方法 public void myAnnotationPointCut() {}这是一个空方法被上面的 Pointcut 标注用来定义切入点逻辑。 前置通知 Before(myAnnotationPointCut())这是一个前置通知表示在切入点 myAnnotationPointCut 指定的方法即被 MyTestAnnotation 注解的方法执行之前运行这个通知方法。public void before(JoinPoint joinPoint) throws Throwable {...}这是实际执行的前置通知方法。在这个方法中可以获取到被拦截方法的签名、参数等信息并且可以执行一些自定义的逻辑。 MethodSignature sign (MethodSignature) joinPoint.getSignature();获取方法签名。Method method sign.getMethod();获取具体的方法对象。MyTestAnnotation annotation method.getAnnotation(MyTestAnnotation.class);获取方法上的 MyTestAnnotation 注解。System.out.print(打印TestAnnotation 参数 annotation.value());打印注解的参数值。 这段代码的作用是在 Spring AOP 环境下拦截所有使用了 MyTestAnnotation 注解的方法并在这些方法执行之前打印出注解的参数值。这种机制可以用来做很多有趣的事情比如 日志记录、权限检查、性能监控 等极大地增强了代码的灵活性和可维护性。 2.3 使用自定义注解 在需要使用的地方使用自定义注解直接添加注解名即可见以下代码 package com.example.demo;import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList; import java.util.List;RestController EnableAspectJAutoProxy public class TestController {RequestMapping(/)MyTestAnnotation(测试Annotation)public void testAnnotation() {System.err.println(测试自定义注解);}}运行上面代码输出如下结果
http://www.dnsts.com.cn/news/97274.html

相关文章:

  • 专业网站设计工作室wordpress 调用评论框
  • 东莞设计网站做最好最全的命理网站
  • 北京垡头网站建设公司网站做贷款许可证
  • 吉林省住房和城乡建设厅网站官网网络营销推广的方式都有哪些
  • 专门做推广的网站吗百度竞价员
  • 福建省建设厅网站投诉网站服务器端口号是什么
  • 台州网站推广技巧付费网页制作的步骤
  • 东莞开发公司网站建设郑州企业网站制作
  • 营销型网站哪家做的好山东外贸网站是什么意思
  • html5网站开发的源码wordpress 无法上传文件
  • 深圳市做网站公司自己做网站翻译服务器 - 添加网站
  • 设计师每天都上的网站湖南又出现5例
  • 搭建网站需要什么技术python 做网站
  • 2018网站内容和备案自己做网站系统
  • 白熊阅读做网站架构wordpress前端主题
  • 两个域名指向同一个网站wordpress不自动更新
  • 泰兴市建设局网站html网页设计介绍
  • 微信网站建设流程图自己做淘宝返利网站
  • 做网站被用作非法用途3一6年级科技小制作手工
  • 网站建设胶州家园网上书城网站建设目的
  • 顺徳网站建设公司有哪些个人注册公司需要什么
  • 莱阳做网站的wordpress搬家出现404
  • 定制网站模板做网站前期工作
  • 做网站的风险分析门户网站网页设计规范
  • 建设银行预约纪念钞网站wordpress免备案
  • 有做翻译英文网站鲜花网站建设的利息分析
  • 怎么查网站后台地址网站代理建设
  • 网站建设与维护百度百科大连商城网站建设
  • 电子商务网站开发与设计报告淘宝做的网站优化
  • 科技类网站设计培训机构