注解就这么简单

MCGS触摸屏数据记录与U盘导出配置全解析 在工业自动化现场,数据记录是设备运行状态分析与故障追溯的基础。HMI触摸屏作为人机交互核心,不仅承担实时监控任务,还负责过程数据的存储与导出。理解数据采集周期、存盘机制与存储介质的匹配原理,能帮助工程师高效配置数据记录功能。合理运用定时存盘、存盘组与U盘导出,可支撑设备趋势分析、报表生成及事故排查。本文以MCGS触摸屏为例,详解数据记录的完整组态流程,并汇总常见配置陷阱与排查思路,为现场调试与长期运维提供可落地的技术参考。 阅读详情

前言

今天要讲的是注解,对于本章节,最好是有Servlet基础的人查阅~因为单纯是Java基础的话,可能用不上注解这个东西。但如果开发过Servlet,就对@WebServlet不会陌生。

现在的开发都推崇使用注解来进行开发,这样就可以免去写XML配置了,十分方便的一项技术~

学习注解可以更好地理解注解是怎么工作的,看见注解了就可以想到它的运行原理了~。

如果有错的地方请大家多多包涵并欢迎在评论区指正~

一、什么是注解?

注解:Annotation….

注解其实就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理。

二、为什么我们需要用到注解?

传统的方式,我们是通过配置文件(xml文件)来告诉类是如何运行的。

有了注解技术以后,我们就可以通过注解告诉类如何运行

例如:我们以前编写Servlet的时候,需要在web.xml文件配置具体的信息

这里写图片描述

我们使用了注解以后,可以直接在Servlet源代码上,增加注解…Servlet就被配置到Tomcat上了。也就是说,注解可以给类、方法上注入信息。

这里写图片描述

明显地可以看出,这样是非常直观的,并且Servlet规范是推崇这种配置方式的。

三、基本Annotation

在java.lang包下存在着5个基本的Annotation,其中有3个Annotation我们是非常常见的了。

3.1@Overried

重写注解

如果我们使用IDE重写父类的方法,我们就可以看见它了。那它有什么用呢??

@Overried是告诉编译器要检查该方法是实现父类的…可以帮我们避免一些低级的错误…

比如,我们在实现equals()方法的时候,把euqals()打错了,那么编译器就会发现该方法并不是实现父类的,与注解@Overried冲突,于是就会给予错误。

这里写图片描述


3.2@Deprecated

过时注解

该注解也非常常见,Java在设计的时候,可能觉得某些方法设计得不好,为了兼容以前的程序,是不能直接把它抛弃的,于是就设置它为过时。

Date对象中的toLocalString()就被设置成过时了

    @Deprecated
    public String toLocaleString() {
        DateFormat formatter = DateFormat.getDateTimeInstance();
        return formatter.format(this);
    }

当我们在程序中调用它的时候,在IDE上会出现一条横杠,说明该方法是过时的。

这里写图片描述


3.3@SuppressWarnings

抑制编译器警告注解

该注解在我们写程序的时候并不是很常见,我们可以用它来让编译器不给予我们警告

当我们在使用集合的时候,如果没有指定泛型,那么会提示安全检查的警告

这里写图片描述

如果我们在类上添加了@SuppressWarnings这个注解,那么编译器就不会给予我们警告了

这里写图片描述

3.4@SafeVarargs

Java 7“堆污染”警告

什么是堆污染呢??当把一个不是泛型的集合赋值给一个带泛型的集合的时候,这种情况就很容易发生堆污染….

这个注解也是用来抑制编译器警告的注解…用的地方并不多,我也不详细说明了……有用到的时候再回来填坑吧。

3.5@FunctionalInterface

@FunctionalInterface用来指定该接口是函数式接口

用该注解显示指定该接口是一个函数式接口。


四、自定义注解基础

上面讲解的是java.lang包下的5个注解,我们是可以自己来写注解,给方法或类注入信息。

4.1标记Annotation

没有任何成员变量的注解称作为标记注解,@Overried就是一个标记注解


//有点像定义一个接口一样,只不过它多了一个@
public @interface MyAnnotation {

}

4.2元数据Annotation

我们自定义的注解是可以带成员变量的,定义带成员变量的注解叫做元数据Annotation

在注解中定义成员变量,语法类似于声明方法一样….


public @interface MyAnnotation {

    //定义了两个成员变量
    String username();
    int age();
}

注意:在注解上定义的成员变量只能是String、数组、Class、枚举类、注解

有的人可能会奇怪,为什么注解上还要定义注解成员变量??听起来就很复杂了….

上边已经说了,注解的作用就是给类、方法注入信息。那么我们经常使用XML文件,告诉程序怎么运行。XML经常会有嵌套的情况


<书>
    <作者>zhongfucheng</作者>
    <价钱>22222</价钱>

</书>

那么,当我们在使用注解的时候,也可能需要有嵌套的时候,所以就允许了注解上可以定义成员变量为注解。

4.3使用自定义注解

上面我们已经定义了一个注解了,下面我们来使用它吧

4.3.1常规使用

下面我有一个add的方法,需要username和age参数,我们通过注解来让该方法拥有这两个变量!


    //注解拥有什么属性,在修饰的时候就要给出相对应的值
    @MyAnnotation(username = "zhongfucheng", age = 20)
    public void add(String username, int age) {

    }

4.3.2默认值

当然啦,我们可以在注解声明属性的时候,给出默认值。那么在修饰的时候,就可以不用具体指定了。


public @interface MyAnnotation {

    //定义了两个成员变量
    String username() default "zicheng";
    int age() default 23;
}
  • 在修饰的时候就不需要给出具体的值了

    @MyAnnotation()
    public void add(String username, int age) {

    }

4.3.3注解属性为value

还有一种特殊的情况,如果注解上只有一个属性,并且属性的名称为value,那么在使用的时候,我们可以不写value,直接赋值给它就行


public @interface MyAnnotation2 {

    String value();
}
  • 使用注解,可以不指定value,直接赋值

    @MyAnnotation2("zhongfucheng")
    public void find(String id) {

    }

4.4把自定义注解的基本信息注入到方法上

上面我们已经使用到了注解,但是目前为止注解上的信息和方法上的信息是没有任何关联的。

我们使用Servlet注解的时候,仅仅调用注解,那么注解的就生效了。这是Web容器把内部实现了。我们自己写的自定义注解是需要我们自己来处理的。

那现在问题来了,我们怎么把注解上的信息注入到方法上呢???我们利用的是反射技术

步骤可分为三部:

  • 反射出该类的方法
  • 通过方法得到注解上具体的信息
  • 将注解上的信息注入到方法上

        //反射出该类的方法
        Class aClass = Demo2.class;
        Method method = aClass.getMethod("add", String.class, int.class);

        //通过该方法得到注解上的具体信息
        MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
        String username = annotation.username();
        int age = annotation.age();

        //将注解上的信息注入到方法上
        Object o = aClass.newInstance();
        method.invoke(o, username, age);

当我们执行的时候,我们发现会出现异常…

这里写图片描述

此时,我们需要在自定义注解上加入这样一句代码(下面就会讲到,为什么要加入这句代码)


    @Retention(RetentionPolicy.RUNTIME)

再次执行的时候,我们就会发现,可以通过注解来把信息注入到方法中了。


五、JDK的元Annotation

前面我们已经介绍了java.lang包下的几个基本Annotation了。在JDK中除了java.lang包下有Annotation,在java.lang.annotation下也有几个常用的元Annotation。

在annotation包下的好几个元Annotation都是用于修饰其他的Annotation定义。


5.1@Retention

上面在将注解信息注入到方法中的时候,我们最后加上了@Retention的注解….不然就会报错了..那它是干什么用的呢?

@Retention只能用于修饰其他的Annotation,用于指定被修饰的Annotation被保留多长时间。

@Retention 包含了一个RetentionPolicy类型的value变量,所以在使用它的时候,必须要为value成员变量赋值

value变量的值只有三个:


public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

java文件有三个时期:编译,class,运行。@Retention默认是class

前面我们是使用反射来得到注解上的信息的,因为@Retention默认是class,而反射是在运行时期来获取信息的。因此就获取不到Annotation的信息了。于是,就得在自定义注解上修改它的RetentionPolicy值


5.2@Target

@Target也是只能用于修饰另外的Annotation,它用于指定被修饰的Annotation用于修饰哪些程序单元

@Target是只有一个value成员变量的,该成员变量的值是以下的:


public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE
}

如果@Target指定的是ElementType.ANNOTATION_TYPE,那么该被修饰的Annotation只能修饰Annotaion


5.3@Documented

@Documented用于指定被该Annotation修饰的Annotation类将被javadoc工具提取成文档。

该元Annotation用得挺少的….


5.4@Inherited

@Inherited也是用来修饰其他的Annotation的,被修饰过的Annotation将具有继承性。。。

例子:

  1. @xxx是我自定义的注解,我现在使用@xxx注解在Base类上使用….
  2. 使用@Inherited修饰@xxx注解
  3. 当有类继承了Base类的时候,该实现类自动拥有@xxx注解

六、注入对象到方法或成员变量上

6.1把对象注入到方法上

前面我们已经可以使用注解将基本的信息注入到方法上了,现在我们要使用的是将对象注入到方法上…..

上边已经说过了,注解上只能定义String、枚举类、Double之类的成员变量,那怎么把对象注入到方法上呢?

6.1.2模拟场景:

  • Person类,定义username和age属性,拥有uername和age的getter和setter方法

public class Person {

    private String username;
    private int age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • PersonDao类,PersonDao类定义了Person对象,拥有person的setter和getter方法

public class PersonDao {

    private Person person;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}
  • 现在我要做的就是:使用注解将Person对象注入到setPerson()方法中,从而设置了PersonDao类的person属性

public class PersonDao {

    private Person person;

    public Person getPerson() {
        return person;
    }


    //将username为zhongfucheng,age为20的Person对象注入到setPerson方法中
    @InjectPerson(username = "zhongfucheng",age = 20)
    public void setPerson(Person person) {

        this.person = person;
    }
}

步骤:

①: 自定义一个注解,属性是和JavaBean类一致的


//注入工具是通过反射来得到注解的信息的,于是保留域必须使用RunTime
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectPerson {

    String username();
    int age();
}

②:编写注入工具


        //1.使用内省【后边需要得到属性的写方法】,得到想要注入的属性
        PropertyDescriptor descriptor = new PropertyDescriptor("person", PersonDao.class);

        //2.得到要想注入属性的具体对象
        Person person = (Person) descriptor.getPropertyType().newInstance();

        //3.得到该属性的写方法【setPerson()】
        Method method = descriptor.getWriteMethod();

        //4.得到写方法的注解
        Annotation annotation = method.getAnnotation(InjectPerson.class);

        //5.得到注解上的信息【注解的成员变量就是用方法来定义的】
        Method[] methods = annotation.getClass().getMethods();

        //6.将注解上的信息填充到person对象上

        for (Method m : methods) {

            //得到注解上属性的名字【age或name】
            String name = m.getName();

            //看看Person对象有没有与之对应的方法【setAge(),setName()】
            try {

                //6.1这里假设:有与之对应的写方法,得到写方法
                PropertyDescriptor descriptor1 = new PropertyDescriptor(name, Person.class);
                Method method1 = descriptor1.getWriteMethod();//setAge(), setName()

                //得到注解中的值
                Object o = m.invoke(annotation, null);

                //调用Person对象的setter方法,将注解上的值设置进去
                method1.invoke(person, o);

            } catch (Exception e) {

                //6.2 Person对象没有与之对应的方法,会跳到catch来。我们要让它继续遍历注解就好了
                continue;
            }
        }

        //当程序遍历完之后,person对象已经填充完数据了

        //7.将person对象赋给PersonDao【通过写方法】
        PersonDao personDao = new PersonDao();
        method.invoke(personDao, person);

        System.out.println(personDao.getPerson().getUsername());
        System.out.println(personDao.getPerson().getAge());

③:总结一下步骤

其实我们是这样把对象注入到方法中的:

  • 得到想要类中注入的属性
  • 得到该属性的对象
  • 得到属性对应的写方法
  • 通过写方法得到注解
  • 获取注解详细的信息
  • 将注解的信息注入到对象上
  • 调用属性写方法,将已填充数据的对象注入到方法中

6.2把对象注入到成员变量

上面已经说了如何将对象注入到方法上了,那么注入到成员变量上也是非常简单的。

步骤:

①:在成员变量上使用注解


public class PersonDao {

    @InjectPerson(username = "zhongfucheng",age = 20) private Person person;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {

        this.person = person;
    }
}

②:编写注入工具


        //1.得到想要注入的属性
        Field field = PersonDao.class.getDeclaredField("person");

        //2.得到属性的具体对象
        Person person = (Person) field.getType().newInstance();

        //3.得到属性上的注解
        Annotation annotation = field.getAnnotation(InjectPerson.class);

        //4.得到注解的属性【注解上的属性使用方法来表示的】
        Method[] methods = annotation.getClass().getMethods();

        //5.将注入的属性填充到person对象上
        for (Method method : methods) {

            //5.1得到注解属性的名字
            String name = method.getName();

            //查看一下Person对象上有没有与之对应的写方法
            try {

                //如果有
                PropertyDescriptor descriptor = new PropertyDescriptor(name, Person.class);

                //得到Person对象上的写方法
                Method method1 = descriptor.getWriteMethod();

                //得到注解上的值
                Object o = method.invoke(annotation, null);

                //填充person对象
                method1.invoke(person, o);
            } catch (IntrospectionException e) {

                //如果没有想对应的属性,继续循环
                continue;
            }
        }

        //循环完之后,person就已经填充好数据了


        //6.把person对象设置到PersonDao中
        PersonDao personDao = new PersonDao();
        field.setAccessible(true);
        field.set(personDao, person);

        System.out.println(personDao.getPerson().getUsername());

七、总结

①:注入对象的步骤:得到想要注入的对象属性,通过属性得到注解的信息,通过属性的写方法将注解的信息注入到对象上,最后将对象赋给类。

②:注解其实就是两个作用:

  • 让编译器检查代码
  • 将数据注入到方法、成员变量、类上

③:在JDK中注解分为了

  • 基本Annotation
    • 在lang包下,用于常用于标记该方法,抑制编译器警告等
  • 元Annotaion
    • 在annotaion包下,常用于修饰其他的Annotation定义

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y

永磁同步电机矢量控制——从三相静止坐标系到d-q坐标系的数学转换 本文深入解析了永磁同步电机矢量控制的核心——从三相静止坐标系到d-q旋转坐标系的数学转换。通过Clark变换和Park变换,将复杂的三相交流系统解耦为易于控制的直流量,从而实现对电机转矩和磁场的独立、精准控制。文章结合物理图像与工程实践,详细阐述了坐标变换的原理、公式推导及其在磁场定向控制(FOC)中的关键作用。 阅读详情

相关推荐

【信号与系统实战解析】—— 拉普拉斯变换在电路分析中的关键应用

本文深入解析了拉普拉斯变换在电路分析中的关键应用。通过将时域微分方程转换为复频域的代数方程,系统化处理初始条件,并利用零极点图分析电路稳定性与频率响应。文章以RLC串联电路为例,详细演示了s域建模、性质运用及综合分析方法,为工程师提供了分析动态电路的强大工具与清晰视角。

weixin_29093017的博客 174

java 反射读取枚举值上的注解信息

反射读取枚举值上的注解信息

菜鸡的博客 1182

【实验】Linux下完全卸载oracle单实例(亲身体验完整版)

停止oracle数据库服务 停止监听 卸载数据库实例 因为自己懒得再弄dbca图形化界面啥的,直接采用dbca静默删除数据库实例,命令如下 dbca -silent -deleteDatabase -sourcedb orclhq -sid orcl -sysDBAUserName orcl -sysDBAPassword zte [oracle@slave ~]$ dbca -silent ...

萝卜吃鱼914的博客 1945

Java枚举类与注解

Java高级编程之枚举类与注解,根据尚硅谷宋红康Java课程总结,适合新手学习,也可当做查阅文档

houjingchuan的博客 665

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5734

基于STM32的智能火灾报警系统设计:多传感器融合与远程控制实现

本文详细介绍基于STM32单片机的智能火灾报警系统设计,采用多传感器融合技术(烟雾、温度、火焰检测)实现高精度火灾识别。系统集成远程控制与手机APP监控,通过加权决策算法降低误报率,提供多级响应策略,确保火灾预警的准确性与可靠性。

u5v6w7的博客 1103

注解【介绍、基本Annotation、元Anntation、自定义注解、注入基本信息、对象】

什么是注解? 注解:Annotation…. 注解其实就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理。 为什么我们需要用到注解? 传统的方式,我们是通过配置文件(xml文件)来告诉类是如何运行的。 有了注解技术以后,我们就可以通过注解告诉类如何运行 例如:我们以前编写Servlet的时候,需要在web.xml文件配置具体的信息 我们使用了...

3y 744

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

状态错误CS0234命名空间“Windows”中不存在类型或命名空间名“Management”(是否缺少程序集引用?)

解决源码编译UE打包失败问题

五百零一 2338

HybridCLR热更新打包报错全解析:从原理到实战解决方案

热更新技术是现代游戏和应用开发中实现动态内容交付与Bug修复的核心机制,它允许开发者在无需重新发布完整应用的情况下更新代码逻辑。其原理通常涉及在运行时加载并执行新的代码模块,这要求框架在底层实现安全的代码隔离、内存管理与元数据桥接。在Unity生态中,HybridCLR作为基于IL2CPP的高性能热更新解决方案,通过补充元数据和AOT泛型引用技术,实现了对C#代码的原生级热更支持,显著提升了开发迭代效率与线上问题修复能力。然而,在实际的工程实践中,尤其是在面向Android、iOS等多平台打包构建时,开发者

weixin_29017445的博客 309

自定义注解,自动注入对象,类似于spring @AutoWired 简单实现

1.注解类 import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)//注解运行范围 @Target(ElementType.FIELD) //@Inherited //@Documented public @interface AutoWared { } 2.Controller public class UserController { @AutoWared private UserService u

夜尽天明xyz的博客 1148

RAG面试内容整理-7. 多轮问答与上下文拼接策略

在对话式的RAG应用中,多轮问答需要处理上下文相关性问题:用户的提问往往依赖于之前的对话内容。为正确理解用户每一轮的问题,系统需要保留和传递对话历史信息。

不务正业的猿 377

@Indexed注解 简单解析

@Indexed注解 简单解析

u012632105的博客 4324

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java注解例子_JAVA注解简单例子

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.reflect.Method;/*** Projec...

weixin_29018419的博客 187

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java注解的简单使用

import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lan.

雨季的博客 175

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

自定义一个简单的注解

注解用了这么多,第一次探索下它的自定义 注解有4种元注解: @Target:表示该注解可以用于什么地方,属性ElementType参数有以下 CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参...

weixin_42132143的博客 479

注解的简单理解

1.注解简单介绍2.自定义注解并使用3.用例

以手筑城的博客 319

注解的简单介绍

@Documented @Target(ElementType.METHOD) //表示该注解能修饰方法 @Retention(RetentionPolicy.RUNTIME) //表示该注解为运行时注解 public @interface GET { //定义注解名字 String value() default ""; //定义注解默认值 int age(); } p...

八步赶蝉 188

自定义注解简单实现

package com.learn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 事务注...

Leon_Jinhai_Sun的博客 347

写一个简单注解

java中如何写一个注解 JAVA自定义注解的使用的一个简单例子

ftm_csdn的博客 231

利用反射实现简单的Spring注解注入实例

一时兴起,这两天看了看Spring的源代码,

蜗牛的专栏 4684

手写简单的Spring基于注解配置的程序

新建一个包用于存放自己手写的程序创建一个自定义注解:ComponentScan/*** 这个自定义的注解的作用相当于原配置文件中的component-scan* @Target(ElementType.TYPE)表示该注解作用的对象* @Retention(RetentionPolicy.RUNTIME)表示该注解的生命周期表示注解的属性value用于存放包名(即:要扫描的包路径),默认是空字符串*/

阿鹏的博客 541

java注解 的简单使用_java注解使用其实很简单

本文使用了反射,反射的话有不理解可以百度问问度娘.注解以前一直觉得很难,主要不知道注解怎么使用的,今天看了一本书之后有了灵感注解其实很简单 就像是一个标识一样定义注解@Retention(RetentionPolicy.RUNTIME)//保留期限@Target(ElementType.METHOD)//使用注解的目标类型public [@interface](https://my.oschina...

weixin_42355204的博客 93

简单的注解

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

rong_jing的博客 192

Spring注解的简单的理解

【代码】Spring注解的简单的理解。

为了生活苦学JAVA 202
上一篇: 泛型就这么简单
下一篇: ThreadLocal就是这么简单
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值