JAVA注解整理

JAVA内置注解

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解是

  • @Override - 检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。

作用在其他注解的注解(或者说 元注解)是:

  • @Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
  • @Documented - 标记这些注解是否包含在用户文档中。
  • @Target - 标记这个注解应该是哪种 Java 成员。
  • @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

从 Java 7 开始,额外添加了 3 个注解:

  • @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
  • @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
  • @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

 

Servlet3.0的注解

  • @WebListener注解 : 监听器
  • @WebFilter : 过滤器
  • @WebServlet : 表示的就是一般的Servlet
  • @WebInitParam : 表示的就是参数, 相当于<init-param>
  • @MultipartConfig : 辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持

 

Spring注解

1.声明bean的注解

  • @Component 组件,没有明确的角色
  • @Service 在业务逻辑层使用(service层)
  • @Repository 在数据访问层使用(dao层)
  • @Controller 在展现层使用,控制器的声明(C)

2.注入bean的注解

  • @Autowired:由Spring提供
  • @Inject:由JSR-330提供
  • @Resource:由JSR-250提供

  都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。

3.java配置类相关注解

  • @Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)
  • @Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
  • @Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)
  • @ComponentScan 用于对Component进行扫描,相当于xml中的(类上)
  • @WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

4.切面(AOP)相关注解

  Spring支持AspectJ的注解式切面编程。

  • @Aspect 声明一个切面(类上) 

  使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。

  • @After 在方法执行之后执行(方法上) 
  • @Before 在方法执行之前执行(方法上) 
  • @Around 在方法执行之前与之后执行(方法上)
  • @PointCut 声明切点 

  在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)

5.@Bean的属性支持

  • @Scope 设置Spring容器如何新建Bean实例(方法上,得有@Bean) 

  其设置类型包括:

  Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), 
  Protetype (每次调用新建一个bean), 
  Request (web项目中,给每个http request新建一个bean), 
  Session (web项目中,给每个http session新建一个bean), 
  GlobalSession(给每一个 global http session新建一个Bean实例)

  • @StepScope 在Spring Batch中还有涉及
  • @PostConstruct 由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
  • @PreDestory 由JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod

6.@Value注解

  • @Value 为属性注入值(属性上) 

7.环境切换

  • @Profile 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。(类或方法上)
  • @Conditional Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(方法上)

8.异步相关

  • @EnableAsync 配置类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口(类上)
  • @Async 在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

9.定时任务相关

  • @EnableScheduling 在配置类上使用,开启计划任务的支持(类上)
  • @Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

10.@Enable*注解说明

  这些注解主要用来开启对xxx的支持。

  • @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持
  • @EnableAsync 开启异步方法的支持
  • @EnableScheduling 开启计划任务的支持
  • @EnableWebMvc 开启Web MVC的配置支持
  • @EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持
  • @EnableJpaRepositories 开启对SpringData JPA Repository的支持
  • @EnableTransactionManagement 开启注解式事务的支持
  • @EnableTransactionManagement 开启注解式事务的支持
  • @EnableCaching 开启注解式的缓存支持

11.测试相关注解

  • @RunWith 运行器,Spring中通常用于对JUnit的支持
  • @ContextConfiguration 用来加载配置ApplicationContext,其中classes属性用来加载配置类

 

SpringMVC注解

  • @EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
  • @Controller 声明该类为SpringMVC中的Controller
  • @RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)
  • @ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
  • @RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
  • @PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
  • @requestParam 主要用于在SpringMVC后台控制层获取参数
  • @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
  • @ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,这对所有注解了 @RequestMapping的控制器内的方法有效。
  • @ExceptionHandler 用于全局处理控制器里的异常
  • @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
  • @ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
  • @SessionAttributes即将值放到session作用域中,写在class上面。

全局异常处理

  • @ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。
  • @ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。

 

SpringBoot注解

  • @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
  • @ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。
  • @Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。
  • @RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。
  • @RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。
  • @EnableAutoConfiguration:SpringBoot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
  • @ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
  • @Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
  • @Import:用来导入其他配置类。
  • @ImportResource:用来加载xml配置文件。
  • @Autowired:自动导入依赖的bean
  • @Service:一般用于修饰service层的组件
  • @Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
  • @Bean:用@Bean标注方法等价于XML中配置的bean。
  • @Value:注入Spring boot application.properties配置的属性的值。示例代码:
  • @Inject:等价于默认的@Autowired,只是没有required属性;
  • @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
  • @Bean:相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
  • @AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。
  • @Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:
  • @Resource(name=”name”,type=”type”):没有括号内内容的话,默认byName。与@Autowired干类似的事。

 

lombok注解

  • @Slf4j: 注解在类上,为类提供一个属性名为 log 的 log4j 的日志对象,避免重复代码。(基于lombok包)
  • @Log:使用的是 java.util.logging.Logger ,直接使用变量 log,用法同上。
  • @Data:用在pojo类,在类上面加这个注解。简化java代码编写,为该类提供读写属性,还提供了equals(),hashCode(),toString()方法。等价于 @ToString、@Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor
  • @AllArgsConstructor:在pojo类上面加了这些注解以后,会生成一个包含所有变量的构造函数,同时如果变量使用了NotNull annotation , 会进行是否为空的校验,全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,参数的顺序与属性定义的顺序一致
  • @NoArgsConstructor:在pojo类上面加了这些注解以后,会生成一个无参构造函数
  • @NonNull:该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。
  • @Cleanup:该注解能帮助我们自动调用close()方法,很大的简化了代码。
  • @Builder:声明实体,表示可以进行Builder方式初始化

 

Swagger注解

  • @Api :  协议集描述, 用于controller类上
  • @ApiOperation : 协议描述, 用在controller的方法上
  • @ApiImplicitParams : 非对象参数集, 用在controller的方法上
  • @ApiImplicitParam : 非对象参数描述, 用在@ApiImplicitParams的方法里边
  • @ApiParam : 对象参数描述, 用在@ApiImplicitParams的方法里边,定义接收的参数形式
  • @ApiModel : 描述返回对象的意义, 用在返回对象类上
  • @ApiModelProperty : 对象属性, 用在参数对象的字段上
  • @ApiResponses : Response集, 用在controller的方法上
  • @ApiResponse : Response, 用在 @ApiResponses里边
  • @ResponseHeader : Response, 响应头设置

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值