java中的注解(一)

注解相信大家对它并不是很陌生,在我们平时的开发中几乎天天都在使用注解尤其是在springBoot出现后几乎之前所有使用xml的配置都可以使用注解来替代。今天我来介绍一下java中的注解。

1.注解应用场景

在原生java中就内置了几个注解有@Override、@Deprecated、@SuppressWarnings等。这几个注解相信我们并不陌生,其中@Override用来修饰一个方法,表示方法不是当前类先声明的,当前类只是重写了这个方法。如果当前类的任何父类或者接口都没有声明过该方法那么java在编译的时候就会报错。当然如果当前类确实是重写了父类的方法就算忘记加@Override这个注解java编译器也不会报错。@Deprecated表示过时的类或方法。@SuppressWarnings表示压制java的编译警告,它有一个必传的参数表示压制哪种类型的警告。java提供的内置注解比较的简单,这里我就不写代码实验了。

注解的另一个使用场景是在一些IOC的框架中使用。现在的java开发经常使用框架来管理对象的生命周期,使用这些框架时,程序员一般不会自己去new对象而是由框架来负责创建对象并且由框架来负责管理对象之间的依赖关系,这就是我们常说的控制反转和依赖注入。spring框架就是一个典型的ioc框架,我会在以后文章中专门介绍这个框架。在使用spring开发中我们使用@Controller来注册一个bean,然后使用@Autowired这个注解来注入到其他类的属性字段。例如:

@Controller
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private OrderService orderService;

}

这样做的好处是可以让代码变得更加的简单,而且容器可以根据配置返回一个代理对象,实现动态代理。

Servlet3.0已经开始支持使用注解来定义Servlet,当然我们还是需要继承HttpServlet然后只需要在类上加上@WebServlet这个注解即可,例如

@WebServlet(urlPatterns = "/test", asyncSupported = true)
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println(config.getServletContext());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(this.getServletConfig().getServletContext());
    }

}

2.创建注解

定义注解使用@interface,另外它还有两个元注解@Target和@Retention,这两个注解是专门用来定义注解的。@Target表示的是注解的目标,@Retention表示注解信息保留到什么时候。在@Target中可以传一个值,这个值在java中使用的是一个枚举类型ElementType,其中ElementType.TYPE表示类、接口(包括注解)、枚举的声明,ElementType.FIELD表示字段的声明,ElementType.METHOD表示方法声明,ElementType.PARAMETER表示参数的声明,没有声明时表示适用所有。在@Retention也可以传入一个值,它是使用RetentionPolicy这个枚举来定义,这个枚举有三个值分别是SOURCE表示只在源码中保留在编译为Class文件后就会丢掉,CLASS表示保留到字节码文件中但是java虚拟机把class文件加载进入内存时不一定在内存中保留,RUNTIME会一直保留到运行时,没有声明时默认是ClASS。无论是@Target还是@Retention里面都可以传入多个值,使用{}表示。下面我们来定义一个注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Action {
    boolean isSingle() default true;
    String [] value();
    String [] url();
}

我们可以在注解中定义方法,然后在使用注解时就需要在注解中按照方法的返回类型使用方法名赋值例如我要使用我定义的这个注解:

@Action(url={"/user","/userhonme"},value={"userController"})
public class UserController {

}

isSingle没有赋值是因为这个方法有默认值。注意当只有一个参数且参数名为value时提供参数值时可以省略"value="。如果注解中定义的方法的返回值为String那么默认值不可以为null但可以是" "。

原文地址:https://www.cnblogs.com/suyang-java/p/10852336.html

时间: 2024-10-11 06:37:14

java中的注解(一)的相关文章

【java】java中的注解(Annotation)是如何工作的?

Java中的注解是如何工作的? 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述到底什么是注解,为什么要引入注解,注解是如何工作的,如何编写自定义的注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架).这会花点儿时间,所以为自己准备一杯咖啡,让我们来进入注解的世界吧. 什么是注解? 用一个词就可以描述注解,那就是元数据,即

java中的注解(Annotation)

转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到源代码中使用其他工具可以对其进行处理的标签.注解不会改变程序的编译方式.java编译器会对包含注解与不包含注解的代码生成相同的虚拟机指令.在java中,注解是被当做修饰符(如public/static之类)来使用的. 注解与注释 注释是供人看的,注解是供程序调用的.一种是程序员写给另一个程序员的,一

Java中的注解的详解

详解Java中的注解 在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色: 编译器指令 构建时指令 运行时指令 l Java内置了三种编译器指令,本文后面部分会重点介绍 l Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如A

Java中自定义注解

前言 随着springboot的流行,以前基于XML的spring配置用的越来越少,JavaConfig形式使用的越来越多,类似于: @Configuration public class AppConfig { @Bean(name="helloBean") public HelloWorld helloWorld() { return new HelloWorldImpl(); } } 可以看出更多的是基于注解(Annotation)实现的,包括springboot的入口类**Ap

【java】细说 JAVA中 标注 注解(annotation)

Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么一回事,一步一步看下去,总会后收获. 注解起源:Annotation(注解)是JDK5.0及以后版本引入的.在java.lang.annotation包中. 注解作用:它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查. 注解格式:注解是以‘@注解名’在代码中存在的 注解分类:标记注解.单

java中的注解

一.注解 注解起到标识作用.比如Junit的@Test注释.Junit会在运行时检查方法上是否存在此注解,如果存在,就通过反射来运行你的方法 1.注解的作用:替代配置文件 2.JDK中提供的三个基本的注解 @Override:说明是否覆盖了父类的方法. @Deprecated:说明过时了. @SuppressWarnings:抑制警告 @SuppressWarnings("抑制的警告的具体类型"): unused:变量未使用 deprecation:使用了不赞成使用的类或方法时的警告

Java中@SuppressWarnings注解用法(转)

背景: J2SE提供的最后一个注解是@SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. @SuppressWarnings注解允许您选择性地取消特定代码段(即,类或方法)中的警告.其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个@SuppressWarnings注解,以使您不会再看到警告.虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告

Java中@Controller注解和@ResponseBody注解,报错找不到template

报错信息:org.thymeleaf.exceptions.TemplateInputException: Error resolving template "xxxxx", template might not exist or might not be accessible by any of the configured Template Resolvers 运行提示找不到模板时, 在controller类上加注解@Controller 和@RestController都可以在前

Java中注解学习系列教程-2

在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解. 本文是注解系列教程中的第二篇.来看看今天主要内容: 0e5bfb282785e6d50be398c29a4d9267.png 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的分类 c03d16d65e241c90e669f077a650bb64.png 注解根据运行机制.来源.功能来分: 1.1:按照运行机制来分,即时注解存在于程序的哪个阶段 e0c7d7da2e69a56219d73cd8be1c4