原创 Spring 最常用的 7 大类注解,史上最强整理!

发布时间:2021-08-02 05:14:52 浏览 1878 来源:猿笔记 作者:程序员java耕耘者

    这样可以在setter方法中添加自定义代码,当在构造方法上使用此注解的时候:需要注意的一点就是一个类中只允许有一个构造方法使用此注解。表示此bean是一个Spring配置。此类可以使用@Bean注解来初始化定义bean,此注解使用在Spring的组件类上,表示此bean只有在第一次被使用的时候才会被创建和初始化。此注解也可以使用在被@Configuration注解的类上:表示其中所有被@Bean注解的方法都会延迟初始化。此注解使用在字段、构造器参数和方法参数上。


    * *核心意见* *

    **@Required**

    此注解用于bean的setter方法上。表示此属性是必须的,必须在配置阶段注入,否则会抛出BeanInitializationExcepion。

    **@Autowired**

    此注解用于bean的field、setter方法以及构造方法上,显式地声明依赖。根据type来autowiring。

    当在字段上使用该注释并且属性用于传递值时,Spring会自动将值分配给该字段。您也可以将此注释用于私有属性(不推荐),如下所示。

    @ComponentpublicclassUser{@AutowiredprivateAddressaddress;}

    最常见的用法是在setter上使用这个注释,这样就可以向setter方法添加自定义代码。如下:

    @ComponentpublicclassUser{privateAddressaddress;@AutoWiredpublicsetAddress(Addressaddress){//customcodethis.address=address;}}

    在构造函数上使用这个注释时,应该注意一个类中只允许有一个构造函数使用这个注释。

    另外,Spring4.3以后,如果一个类只有一个构造函数,那么即使不使用这个注释,Spring也会自动注入相关bean。如下:

    @ComponentpublicclassUser{privateAddressaddress;publicUser(Addressaddress){this.address=address;}}

    **@Qualifier**

    此注释与@Autowired一起使用。使用这个注释可以让您更好地控制注射过程。

    @Qualifier可用于单个构造函数或方法的参数。当上下文中有几个相同类型的bean时,您不能通过使用@Autowired来区分要绑定的bean,因此您可以使用@Qualifier来指定名称。

    @ComponentpublicclassUser{@Autowired@Qualifier("address1")privateAddressaddress;...}

    @Configuration

    这个注释用于类来定义bean。它的功能与xml配置文件相同,这表明这个bean是Spring配置。此外,这个类可以使用@Bean注释来初始化定义Bean。

    @ConfiguartionpublicclassSpringCoreConfig{@BeanpublicAdminUseradminUser(){AdminUseradminUser=newAdminUser();returnadminUser;}}@ComponentScan

    此注解一般和@Configuration注解一起使用,指定Spring扫描注解的package。如果没有指定包,那么默认会扫描此配置类所在的package。

    **@Lazy**

    这个注释用在Spring的组件类上。默认情况下,Spring中的Bean依赖关系是从一开始就创建和配置的。如果您想延迟初始化一个bean,您可以在这个类上使用Lazy注释,这意味着这个bean只有在第一次使用时才会被创建和初始化。

    这个标注也可以用在@Configuration标注的类上,这意味着@Bean标注的所有方法都会延迟初始化。

    **@Value**

    此注释用于字段、构造函数参数和方法参数。@Value可以指定属性值的表达式。它支持使用SpringEL通过# {}和$ {}获取值,从属性源(属性文件、本地环境变量、系统属性等)注入值。)转换成bean的属性。

    此注解值的注入发生在AutowiredAnnotationBeanPostProcessor类中。

    **SpringMVC和REST注解**

    **@Controller**

    此注解使用在class上声明此类是一个Springcontroller,是@Component注解的一种具体形式。

    **@RequestMapping**

    此注解可以用在class和method上,用来映射web请求到某一个handler类或者handler方法上。

    当此注解用在Class上时,就创造了一个基础url,其所有的方法上的@RequestMapping都是在此url之上的。

    可以使用其method属性来限制请求匹配的httpmethod。

    @Controller@RequestMapping("/users")publicclassUserController{@RequestMapping(method=RequestMethod.GET)publicStringgetUserList(){return"users";}}

    这篇也推荐大家看下:SpringMVC常用注解。此外,Spring4.3之后引入了一系列@RequestMapping的变种。如下:

    @GetMapping

    @PostMapping

    @PutMapping

    @PatchMapping

    @DeleteMapping

    分别对应了相应method的RequestMapping配置。

    **@CookieValue**

    此注解用在@RequestMapping声明的方法的参数上,可以把HTTPcookie中相应名称的cookie绑定上去。

    @ReuestMapping("/cookieValue")publicvoidgetCookieValue(@CookieValue("JSESSIONID")Stringcookie){}

    cookie即http请求中name为JSESSIONID的cookie值。

    **@CrossOrigin**

    此注解用在class和method上用来支持跨域请求,是Spring4.2后引入的。

    @CrossOrigin(maxAge=3600)@RestController@RequestMapping("/users")publicclassAccountController{@CrossOrigin(origins="

    **@ExceptionHandler**

    此注解使用在方法级别,声明对Exception的处理逻辑。可以指定目标Exception。

    **@InitBinder**

    此注解使用在方法上,声明对WebDataBinder的初始化(绑定请求参数到JavaBean上的DataBinder)。在controller上使用此注解可以自定义请求参数的绑定。

    **@MatrixVariable**

    这个注释用在请求处理程序方法的参数上,Spring可以在matrixurl中注入相关的值。这里的矩阵变量可以出现在url的任何地方,它们在变量之间使用;分离。如下:

    //GET/pets/42;q=11;r=22@RequestMapping(value="/pets/{petId}")publicvoidfindPet(@PathVariableStringpetId,@MatrixVariableintq){//petId==42//q==11}

    需要注意的是,Springmvc默认不支持矩阵变量,需要开启。

    注释布局需要按如下方式打开:

    @ConfigurationpublicclassWebConfigextendsWebMvcConfigurerAdapter{@OverridepublicvoidconfigurePathMatch(PathMatchConfigurerconfigurer){UrlPathHelperurlPathHelper=newUrlPathHelper();urlPathHelper.setRemoveSemicolonContent(false);configurer.setUrlPathHelper(urlPathHelper);}}

    **@PathVariable**

    此注解使用在请求handler方法的参数上。@RequestMapping可以定义动态路径,如:

    @RequestMapping("/users/{uid}")

    您可以使用@PathVariable将路径中的参数绑定到请求方法参数。

    @RequestMapping("/users/{uid}")publicStringexecute(@PathVariable("uid")Stringuid){}

    **@RequestAttribute**

    此注释用于请求处理程序方法的参数,并用于将web请求中的属性(requestattributes,由服务器输入的属性值)绑定到方法参数。

    **@RequestBody**

    此注解用在请求handler方法的参数上,用于将http请求的Body映射绑定到此参数上。HttpMessageConverter负责将对象转换为http请求。

    **@RequestHeader**

    此注释用于请求处理程序方法的参数,以将http请求头的值绑定到参数。

    **@RequestParam**

    此注释用于请求处理程序方法的参数,以将http请求参数的值绑定到参数。

    **@RequestPart**

    此注释用于请求处理程序方法的参数,并用于将文件等多部分绑定到参数。

    **@ResponseBody**

    此注释用于请求处理程序方法。与@RequestBody类似,它用于将方法的返回对象直接输出到http响应。

    **@ResponseStatus**

    此注解用于方法和exception类上,声明此方法或者异常类返回的http状态码。可以在Controller上使用此注解,这样所有的@RequestMapping都会继承。

    **@ControllerAdvice**

    此注解用于class上。前面说过可以对每一个controller声明一个ExceptionMethod。

    这里可以使用@ControllerAdvice来声明一个类来统一对所有@RequestMapping方法来做@ExceptionHandler、@InitBinder以及@ModelAttribute处理。

    **@RestController**

    此注解用于class上,声明此controller返回的不是一个视图而是一个领域对象。其同时引入了@Controller和@ResponseBody两个注解。

    **@RestControllerAdvice**

    此注解用于class上,同时引入了@ControllerAdvice和@ResponseBody两个注解。

    **@SessionAttribute**

    此注释用于方法的参数,以将会话中的属性绑定到参数。

    **@SessionAttributes**

    此注解用于type级别,用于将JavaBean对象存储到session中。一般和@ModelAttribute注解一起使用。如下:

    @ModelAttribute("user")publicPUsergetUser(){}//controller和上面的代码在同一controller中@Controller@SeesionAttributes(value="user",types={User.class})publicclassUserController{}

    **SpringBoot注解**

    **@EnableAutoConfiguration**

    这个注释通常用在主应用程序类上,告诉SpringBoot根据当前包自动添加bean,设置bean的属性等等。

    **@SpringBootApplication**

    此注解用在SpringBoot项目的应用主类上(此类需要在basepackage中)。

    使用了此注解的类首先会让SpringBoot启动对basepackage以及其sub-pacakage下的类进行componentscan。

    同时,以下注释被添加到该注释中:

    @Configuration

    @EnableAutoConfiguration

    @ComponentScan

作者信息

程序员java耕耘者 [等级:3] 个人公众号:Java耕耘者
发布了 68 篇专栏 · 获得点赞 283 · 获得阅读 33854

相关推荐 更多