JavaEE中一些不大经常使用,可是具备特点功能的注解【持续整理】

什么是注解


注解(Annotation)至关于一种标记,在程序中加入注解就等于为程序打上某种标记,就去干相应的事,标记能够加在包、类,属性、方法,方法的参数以及局部变量上。java

注解的简单应用

注解类

@interface A {

}

应用注解类

@A
class B {

	@A
	String field;

	@A
	void method(){

	}
}

小结

注解能够加在类、成员变量、成员方法上。web

注解是JDK1.5以后才提供的特性,三个常见注解:spring

  • @Deprecated 意思是“废弃的,过期的”
  • @Override 意思是“重写、覆盖”
  • @SuppressWarnings 意思是“压缩警告”

元注解


首先解释一下什么是元注解,元注解就是注解注解的注解。数据库

提及来有点拗口,能够这样理解,看下面的例子:服务器

/**
 * 这是一个自定义的注解(Annotation)类 在定义注解(Annotation)类时使用了另外一个注解类Retention
 * 在注解类上使用另外一个注解类,那么被使用的注解类就称为元注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface MyAnnotation {
}

这是咱们自定义的注解MyAnnotation,在咱们自定义的注解注解类中,咱们使用了这两个注解@Retention@Target,这两个注解就是元注解——注解(动词)注解(注解类)的注解(名词)。websocket

J2SE5.0版本在 java.lang.annotation提供了四种元注解,专门注解其余的注解:session

  • @Documented –注解是否将包含在JavaDoc中
  • @Retention –何时使用该注解
  • @Target? –注解用于什么地方
  • @Inherited – 是否容许子类继承该注解

@Documented元注解

app

@Retention元注解

首先看一下带有注解的Java的执行过程,分为下面三个阶段异步

  1. Java源程序上加了一个注解
  2. Java源程序要由javac去编译,把源文件编译成.class文件
  3. 运行编译好的class文件 这三个阶段就是Java-->class-->字节码的过程

这个@Retention元注解就是表示注解的生命周期的,他有三个属性值socket

  • RetentionPolicy.SOURCE阶段(java源文件阶段)
  • RetentionPolicy.CLASS阶段(class文件阶段)
  • RetentionPolicy.RUNTIME阶段(内存中的字节码运行时阶段)

@Target元注解

@Target元注解决定了一个注解能够标识到哪些成分上,如标识在在类身上,或者属性身上,或者方法身上等成分,@Target默认值为任何元素

@Inherited元注解


javax下的注解

@PostConstruct

用来修饰一个非静态的void()方法.并且这个方法不能有抛出异常声明。

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,而且只会被服务器调用一次,相似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数以后,init()方法以前运行。

@PreDestroy

用来修饰一个非静态的void()方法.并且这个方法不能有抛出异常声明。

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,而且只会被服务器调用一次,相似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法以后运行,在Servlet被完全卸载以前。

@WebListener

该注解用于监听器

监听器类应该实现下面接口之一:

  1. 对Request的监听有ServletRequestListener和ServletRequestAttributeListener。

    • 前者可见监听Request的建立和销毁;
    • 然后者能够对Request的属性进行监听。
  2. 对Session的监听有HttpSessionListener和HttpSessionAttributeListener。

    • 前者能够监听HttpSession的建立跟销毁,
    • 后者则是对session中属性的监听。
  3. 对于ServletContext的监听器有ServletContextListener和ServletContextAttributeListener。

    • 前者能够监听到ServletContext的建立和销毁,
    • 后者能够监听到ServletContext中属性的监听。

@MappedSuperclass

JPA环境下中使用

  1. @MappedSuperclass注解用在实体类的父类上
  2. @MappedSuperclass标识的类表示其不能映射到数据库表,由于其不是一个完整的实体类,可是它所拥有的属性可以让继承其的子类映射到数据库表中
  3. @MappedSuperclass标识得类不能再有@Entity或@Table注解

@Inheritance

注解标注在父类上不会被子类所继承 我也仅仅是会用,说的不是太明白


Spring提供的注解

@Component

  • spring做用在类上的注解有@Component@Responsity@Service以及@Controller
  • 当注解做用在类上时,代表这些类是交给spring容器进行管理的,而用@Autowired@Resource引入该类对象时,并不须要我本身去new一个,spring容器会自动的将我须要对象创造出来。这就是一般所说的依赖注入和控制反转。

泛指组件,当组件很差归类的时候,咱们可使用这个注解进行标注。通常公共的方法我会用上这个注解

@EnableScheduling和@Scheduled

@Scheduled注解是Spring提供的定时任务调度的注解,该注解注解在方法上,可定义cron表达式定时执行,也可自定义延时时间执行

在使用@Scheduled注解的时候,要确保已经开启Spring此功能,开启此功能只须要将@EnableScheduling注解到启动类上便可

@NoRepositoryBean

在使用spring data jpa的时候,每一个实体类有须要实现的相同的方法,就能够单独抽取出来,放在一个公共的接口MyRepository中,并这个类继承了jpa的相关Repository接口或类,由MyRepository接口来衔接jpa的相关操做,其余实体类须要实现的操做就直接继承MyRepository接口,不用每次都去继承jpa的相关接口或类啦,因此这个公共接口就须要这个注解@NoRepositoryBean来标识。

@Repository

Dao层的注解,若是继承了相关的Repository或者配置了bean写不写均可以

@EnableWebSocketMessageBroker

@EnableWebSocketMessageBroker注解用于开启使用STOMP协议来传输基于代理(MessageBroker)的消息,这时候控制器(controller)开始支持@MessageMapping,就像是使用@requestMapping同样。

@EnableJms

注解@EnableJms设置在@Configuration类上,用来声明对 JMS 注解的支持。

@EnableAsyncx

注解在配置类上, 开始异步任务支持

@Async

注解在类或者方法上, 来声明一个异步任务

@Order

定义Spring容器加载Bean的顺序

@ServerEndpoint

websocket的@RequestMapping


Swagger提供的注解

@EnableSwagger2

@Api

用于类;表示标识这个类是swagger的资源

  • [tags] – 表示说明
  • [value] – 也是说明,可使用tags替代 可是tags若是有多个值,会生成多个list

@ApiOperation()

用于方法;表示一个http请求的操做

  • [value] - 用于方法描述
  • [notes] - 用于提示内容
  • [tags] - 能够从新分组(视状况而用)

@ApiParam()

用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)

  • [name] – 参数名
  • [value] – 参数说明
  • [required] – 是否必填

@ApiModel()

用于类 ;表示对类进行说明,用于参数用实体类接收

  • [value] – 表示对象名
  • [description] – 描述

均可省略

@ApiModelProperty()

用于方法,字段; 表示对model属性的说明或者数据操做更改

  • [value] – 字段说明
  • [name] – 重写属性名字
  • [dataType] – 重写属性类型
  • [required] – 是否必填
  • [example] – 举例说明
  • [hidden] – 隐藏

@ApiIgnore()

用于类或者方法上,能够不被swagger显示在页面上

@ApiImplicitParam()

用于方法 表示单独的请求参数

@ApiImplicitParams()

用于方法,包含多个 @ApiImplicitParam

  • [name] – 参数ming
  • [value] – 参数说明
  • [dataType] – 数据类型
  • [paramType] – 参数类型
  • [example] – 举例说明
相关文章
相关标签/搜索