Java注解总结

注解

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。

一、java注解

java内置了三种标准注解,定义在java.lang中的注解:

1、@Override

表示当前的方法定义将覆盖超类中的方法(重写)。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。

2、@Deprecated

若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用

3、@SuppressWarnings

用于抑制编译器产生警告信息。

四种元注解

1、@Target

表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括:

ElemenetType.CONSTRUCTOR-----------------------------构造器声明 
ElemenetType.FIELD ----------------------------------域声明(包括 enum 实例) 
ElemenetType.LOCAL_VARIABLE------------------------- 局部变量声明 
ElemenetType.METHOD ---------------------------------方法声明 
ElemenetType.PACKAGE --------------------------------包声明 
ElemenetType.PARAMETER ------------------------------参数声明 
ElemenetType.TYPE----------------------------------- 类,接口(包括注解类型)或enum声明

2、@Retention

表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:

RetentionPolicy.SOURCE-------------注解将被编译器丢弃 
RetentionPolicy.CLASS -------------注解在class文件中可用,但会被VM丢弃 
RetentionPolicy.RUNTIME ---------VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

3、@Documented

将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。

4、@Inherited

允许子类继承父类中的注解

二、MyBaits

1.@Insert()

新增

2.@Update()

更新

3.@Delete()

删除

4.@Select()

查询

5.@Result()

实现结果集封装

6.@Results

可以与@Result 一起使用,封装多个结果集

7.@ResultMap:

实现引用@Results 定义的封装

8.@One

实现一对一结果集封装

9.@Many

实现一对多结果集封装

10.@CacheNamespace

实现注解二级缓存的使用

11.@Results

代替的是标签

12.@Resutl

代替了  标签和 标签

13.@One

(一对一):代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象

14.@Many

(多对一):代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象

三、MyBaits-Plus

Spring

注解分为两类,一种是使用bean的(@Autowired , @Resource),一种是注册bean的(@Component , @Repository , @ Controller , @Service , @Configration)

1.@Bean注解

@Bean 标识一个用于配置和初始化一个由SpringIoc容器管理的新对象的方法,类似于XML配置文件的 ,一般与@Configration注解配合使用

注册bean

2.@Service注解

首先,在配置root-config.xml文件中加一行:

加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了

类似作用的还包括@Component、@Repository、@Controller:

3.@Component注解

把普通pojo实例化到spring容器中,相当于配置文件中的 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类

4.@Repository注解

用于标注数据访问组件,即DAO组件,再稍微大点的项目里,使用xml的bean定义来配置会大大增加代码体积且不易维护,所以引入了自动扫描的机制,它的作用和在xml文件中使用bean节点配置组件时一样的。

5.@Controller注解

当组件属于控制层时,则使用@Controller注解

被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作

6.@Configration注解

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器

需要注意的是:

@Configuration不可以是final类型;

@Configuration不可以是匿名类;

嵌套的configuration必须是静态类。

Bean注解主要用于方法上,有点类似于工厂方法,当使用了@Bean注解,我们可以连续使用多种定义bean时用到的注解,譬如用@Qualifier注解定义工厂方法的名称,用@Scope注解定义该bean的作用域范围,譬如是singleton还是prototype等。

使用bean

7.@Autowired 注解

它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

@Autowired注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用)如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合@Qualifier注解进行限定,指定注入的bean名称

8.@Resource注解

@Resource和@Autowired注解都是用来实现依赖注入的。只是@Autowired按byType自动注入,而@Resource默认按 byName自动注入

@Resource依赖注入时查找bean的规则

  1. 既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
  1. 只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
  1. 只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  1. 既指定了@Resource的name属性又指定了type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

9.@ComponentScan注解

@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。

例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。

10.@PropertySouce注解

通过@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值,参数是properties文件中定义的key值。

11.@ImportResource注解和@Import注解

@Import注解是引入带有@Configuration的java类。

@ImportResource是引入spring配置文件.xml

12.@RequestMapping

是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

13.@responseBody注解

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

14.@Value("abc")和@Value("${user}")

@Value("abc")给基本类型注入

@Value("${user}")读取配置文件的key得到value给基本类型注入

SpringMVC

1、@RequestMapping

@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上其配置的路径;最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求。

2、@RequestParam

绑定单个请求参数值@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。

3、@PathVariable

绑定URI模板变量值@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

4、@ModelAttribute

ModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解在方法参数上时会将注解的参数对象添加到Model中;当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法,但其它Action被调用时会首先调用该方法。

5、@SessionAttributes

在默认情况下,ModelMap中的属性作用域是request级别,也就是说,当本次请求结束后,ModelMap 中的属性将销毁。如果希望在多个请求中共享ModelMap中的属性,必须将其属性转存到session 中,这样 ModelMap 的属性才可以被跨请求访问。
Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。

6、@Responsebody与@RequestBody

@Responsebody表示该方法的返回结果直接写入HTTP response body中。一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。
@RequestBody将HTTP请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象

SpringBoot

1、@Bean

它是可以标注在一个方法上,并且方法返回的这个对象就会注册到Spring容器中

2、@Primary

同样的这些组件,比如两个方法都返回了数据源DataSource,可以给某一个方法上面标注一个@Primary这样的话,就能够标识这是一个主要组件,那么就默认使用这个标注了@Primary这个方法的组件。

3、@DependsOn

这个是声明组件之间的依赖关系的,比如A要创建,@DependsOn  B跟C,那么就是创建A这个组件的时候,就会把B跟C先提前准备好

4、@Lazy

组件的懒加载,也就是说在用的时候才进行创建,不用的话不创建。因为默认的组件,Spring容器一启动,容器中的所有组件都会进行创建。

5、@Scope

声明组件的作用范围,常用的作用范围是:SCOPE_PROTOTYPE(原型),SCOPE_SINGLETON(单例)

单例就是获取到的东西跟他原本的是一模一样的,独一份的。

而原型就是有一个本体,但你获取的都是这个本体的克隆对象,就跟这个本体不是一个对象,但是内容是一样的。

如果学过原型设计模式和单例设计模式就知道这两者的用途。

6、@Configuration

这个注解在SpringBoot大量使用到,这个注解用来标注一个类,就说明这个类是一个配置类来替换以前的Spring的Xml配置文件。

7、@Component

这个用来编写Spring/WEB应用的时候,标注在一个类上,那么这个类就自动添加到容器中。

8、@Indexed

这个是Spring5.0里面新加入的一个注解,它是一个加速注解,也就是说默认Spring容器一启动的时候,所有的组件才会进行加载创建对象,如果有大量的组件经常要用到,又不想等Spring容器启动的时候才加载并创建对象,那么就可以标注@Indexed 这个注解,这样的话就相当于给组件直接生成相关的class缓存并全部放好,那么以后Spring容器一旦启动就直接能用了,就不用再走整个Spring容器的启动流程了。

9、@Order

这个是组件之间的顺序,设置的数字越小,优先级就会越高,一旦优先级越高就优先创建这个组件。

10、@ComponentScan

这个大家估计都知道了,就是包扫描,可以批量扫描某一个包下的所有组件(该包和下面的子包)。

11、@Conditional

这个在SpringBoot里面的核心注解,他是根据有没有满足相关条件,再来进行组件注入。

12、@Import

这个是用于导入第三方的jar的,如果自己来写注解,那么这些自己写的注解只能标注在自己的类上,但是引入别人开发好的第三方包,并且这个第三方包这个源码在包里面已经压缩好了,所以就可以使用@Import 这个注解来把第三方的包里面的组件导入到容器中。

13、@ImportResource

这个是用于导入以前的Xml配置文件。

14、@Profile

这个是在SpringBoot里面的多环境激活。

15、@PropertySource

这个是导入外部的properties配置文件

16、@PropertySources

跟@PropertySource的组件注解

17、@Autowired

都是组件的装配功能

18、@Qualifier

都是组件的装配功能

19、@Value

获取环境变量里面的值或者是获取配置文件中的值 @Value("#{xxx}")  @Value("${xxx}")

#:可以对象调用方法

$:代表的是一个取值

20、@Lookup

这个注解只能标注在方法上,这个注解用于有时候这个单实例组件就想使用原型模式引用另外的原型的组件,使其能够获取不一样的对象。  这个注解标注在方法上以后,它会去容器中找相关组件。

更具体的解释就是:

A是单实例组件,A要使用B这个原型组件,在A获取B还是获取的是单实例的,如果用了这个@Lookup注解,那么A获取B,就是获取的是原型的B。

注意:@Lookup若标注在get()的方法上,使用@Bean的这种方式注册的组件,那么@Lookup这个注解就不不生效。

Swagger注解API

1、@ApiModelProperty

作用范围:对象属性

使用位置:用在出入参数对象的字段上

2、@Api

作用范围:协议集描述

使用位置:用于controller类上

3、@ApiOperation

作用范围:协议描述

使用位置:用在controller的方法上

4、@ApiResponses

作用范围:Response集

使用位置:用在controller的方法上

5、@ApiResponse

作用范围:Response

使用位置:用在 @ApiResponses里边

6、@ApiImplicitParams

作用范围:非对象参数集

使用位置:用在controller的方法上

7、@ApiImplicitParam

作用范围:非对象参数描述

使用位置:用在@ApiImplicitParams的方法里边

8、@ApiModel

作用范围:描述返回对象的意义

使用位置:用在返回对象类上

自定义注解

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值