注解的介绍

1.注解是什么

JDK5.0新增 --- 注解(Annotation),也叫元数据。与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。


2.注解的作用

  • 不是程序本身,可以对程序作出解释,可以被其他程序读取(比如:编译器等)
  • 注解还可以添加一些参数名 例如:@SuppressWarnings(value="unchecked")
  • 格式:@+注解名

    3.注解的由来

在注释之前(甚至之后),XML被广泛用于框架的配置,开发人员和架构师认为XML维护变得越来越麻烦。 他们想要某些东西可以与代码紧密耦合而不是XML,而XML与代码之间的耦合非常松散(在某些情况下,几乎是分开的)。

如果搜索“ XML与注释”,会发现很多有趣的争论。 有趣的一点是,引入了XML配置可以将配置与代码分开。 注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 XML 相对于注解则是相反的。如今,大多数框架都将XML和注解结合使用,以充分利用两者的积极方面。


4.注解的分类注解可以根据注解参数分为三大类

  • 标记注解: 没有参数的注解,仅用自身的存在与否为程序提供信息,如@Override注解,该注解没有参数,用于表示当前方法为重写方法。
  • 代码:
  • @Target({TYPE,CONSTRUCTOR,METHOD})
    public @interface MyAnnotation4 {
    }

  • 单值注解: 只有一个参数的注解,如果该参数的名字为value,那么可以省略参数名,如 @SuppressWarnings(value = “all”),可以简写为@SuppressWarnings(“all”)。
  • 完整注解: 有多个参数的注解。

  1. 5、JDK内置的注解

  • @Override 定义在java.lang.Override中,只用于修辞方法,表示一个方法声明打算重写一个超类中的另一个方法声明

    @Deprecated 添加此注解表示改方法不推荐使用,但可以使用

    @SuppressWarnings:抑制编译时的警告信息

  • 6、元注解

  • 元注解作用:负责注释其他注解

  •  元注解有四个:

    @Retention 用于描述注解的使用范围,应用到一个注解上的时候,解释说明了这个注解的的存活时间。

    RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。  

    RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。  

    RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们

    元注解实例代码:

    @Target  表示需要在什么级别保存该注解信息,用于描述注解的生命周期(source<class<runtime)

    source:源代码

    runtime:运行时

    ElementType.ANNOTATION_TYPE 可以给一个注解进行注解

    ElementType.CONSTRUCTOR 可以给构造方法进行注解

    ElementType.FIELD 可以给属性进行注解

    ElementType.LOCAL_VARIABLE 可以给局部变量进行注解

    ElementType.METHOD 可以给方法进行注解

    ElementType.PACKAGE 可以给一个包进行注解

    ElementType.PARAMETER 可以给一个方法内的参数进行注解

    ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举

    @Document 这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去

  • @Inherited

    @Inherited 是继承的意思,但是它并不是说注解本身可以继承,

    而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,

    那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。

    说的比较抽象。代码来解释。

    代码:

    @Inherited
    
    @Retention(RetentionPolicy.RUNTIME)
    
    @interface Test {}
    
    
    
    @Test
    
    public class A {}
    
    public class B extends A {}
    
    @Repeatable JDK1.8引入
    
    Repeatable 自然是可重复的意思

    代码:

    @interface Persons {
    
        Person[]  value();
    
    }
    
    @Repeatable(Persons.class)
    
    @interface Person{
    
        String role default "";
    
    }
    
    
    
    
    
    @Person(role="artist")
    
    @Person(role="coder")
    
    @Person(role="PM")
    
    public class SuperMan{
    
    
    
    }

    除了以上这四(五个--》JDK1.8之后添加了一个)个,所有的其他注解全部都是自定义注解。

  • 目录

    1.注解是什么

    2.注解的作用

    3.注解的由来

    4.注解的分类(注解可以根据注解参数分为三大类)

    5、JDK内置的注解

    6、元注解

    8、注解的应用场景

    9、Spring注释总结


  • 在javaWeb中,Selvert开发有两种方式,一种是web配置,另一种是注解式开发

    在spring框架就是一个典型的注解式开发


  • 9、Spring注释总结

  • @Configuration 标识当前类是配置类

    @ComponentScan 包扫描注解 扫描注解

    @Bean 标识该方法的返回值交给Spring容器管理

    @Scope 控制单例和多例

    @Lazy 懒加载

    @PostConstruct 初始化方法

    @PreDestroy 销毁方法

    @Component 将当前类未来的对象交给容器管理

    @Autowired 按照类型进行注入

    @Qualifier 按照名称进行注入

    @Repository 标识持久层注解

    @Service 标识Service层

    @Controller 标识Controller层

    @Value 为属性赋值

    @PropertySource 加载指定路径下的配置文件

    @Aspect 标识当前类是一个切面类

    @Pointcut 用于定义切入点表达式 表达式写法4种

    @EnableAspectJAutoProxy 让AOP的注解有效果

    @Before AOP-前置通知

    @AfterReturning AOP-后置通知

    @AfterThrowing AOP-异常通知

    @After AOP-最终通知

    @Around AOP-环绕通知

    @Order(1) //可以利用order关键字 实现AOP的排序 数字越小越先执行

    @ResponseBody 将返回的数据转化为JSON串, 如果是字符串本身 原数据返回

    @RequestMapping("/hello") 实现浏览器的请求路径与方法的映射

    @PathVariable restFul结构,接收参数的注解

    @GetMapping("") 只能接收GET请求类型

    @DeleteMapping("") 只能接收DELETE请求类型

    @PostMapping("") 只能接收POST请求类型

    @PutMapping("") 只能接收PUT请求类型

    @RestController 表示Controller类,同时要求返回值为JSON

    @CrossOrigin 允许跨域访问

    @RequestMapping 将公共的部分抽取

    @Data lombok动态生成get/set/toString/equals/hashcode等方法

    @Accessors(chain = true) 开启链式加载

    @NoArgsConstructor 生成无参构造方法

    @AllArgsConstructor 生成全参构造方法

    @Mapper mybatis将当前的接口交给Spring容器管理. Map<类名小写,JDK动态代理对象>

    @SpringBootTest 该注解的作用在进行代码测试时启动spring容器,之后动态的获取对象 注意包路径 主启动类的同包及子包中

    @Param 将参数封装为Map集合

    @Alisa 设置别名

    @MapperScan Mybatis中扫描指定包路径的接口 为其创建代理对象.

    @Insert Mybatis 新增操作注解

    @Update Mybatis 修改操作注解

    @Delete Mybatis 删除操作注解

    @Select Mybatis 查询操作注解

    @Transactional Spring中用来控制事务

    @RestControllerAdvice Controller层的全局异常处理

    @ExceptionHandler 按照某种异常类型进行拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值