admin管理员组文章数量:1794759
Spring Boot学习笔记5:Springboot常用注解总结
Spring Boot学习笔记5:Springboot常用注解总结
- @SpringBootApplication
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
- @Bean
- @Service
- @Controller
- @Repository
- @Component
- @Scope
- @Autowired
- @Resource
- @Qualifier
- @RestController
- @Responsebody
- @RequestMapping
- @GetMapping/@PostMapping/@PutMapping/@DeleteMapping
- @RequestParam
- @PathVariable
- @RequestAttribute
- @ModelAttribute
- @SessionAttributes
- @SessionAttribute
- @RequestAttribute
- @ConfigurationProperties
- @Profiles
- @ControllerAdvice
- @ExceptionHandler(Exception.class)
- GitHub示例
通常注解在主类上,此注解是个组合注解,包括了@Configuration、@EnableAutoConfiguration、@ComponentScan。
@Configuration注解当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到Spring容器中,并且实例名就是方法名。
@EnableAutoConfiguration让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,试图猜测和配置可能需要的Bean,一般加在主类上。
@ComponentScan扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到Spring容器中进行管理,一般放在根目录下。
@Bean注解在方法的上,而不是类上,意思是产生一个Bean,并交给Spring管理。
@Service注解在类上,表示这是一个业务层Bean。
@Controller注解在类上,表示这是一个控制层Bean。
@Repository注解在类上,表示这是一个数据访问层Bean。
@Component注解在类上,表示通用Bean ,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope注解在类上,描述spring容器如何创建Bean实例。
- singleton: 默认值,表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例;
- prototype:表示每次获得bean都会生成一个新的对象;
- request:表示在一次http请求内有效(只适用于web应用);
- session:表示在一个用户会话内有效(只适用于web应用);
- globalSession:表示在全局会话内有效(只适用于web应用);
按类型注入把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required = false)时,就算找不到bean也不报错。
@Resource按名称注入把配置好的Bean拿来用。与@Autowired功能类似。
可以加上(name = "name",type = "type")。
@Qualifier当有多个同一类型的Bean时,可以用@Qualifier("name")来指定。与@Autowired配合使用。
@RestController此注解是个组合注解,包括了@Controller、@ResponseBody。原来在@Controller中返回JSON需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回JSON格式。
@Responsebody注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中。一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
@RequestMapping@RequestMapping("/path")是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:
- params:指定request中必须包含某些参数值是,才让该方法处理;
- params = "param":表示请求必须包含名为 param的请求参数;
- params = "!param":表示请求不能包含名为 param的请求参数;
- params = "param= value":表示请求包含名为 param的请求参数,但其值必须为 value;
- params = "param!= value":表示请求包含名为 param的请求参数,但其值不能为 value;
- headers:指定request中必须包含某些指定的header值,才能让该方法处理请求;
- value:指定请求的实际地址,指定的地址可以是URI Template 模式;
- method:指定请求的method类型, RequestMethod.GET/POST/PUT/DELETE等;
- consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
- produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
等价于@RequestMapping(method = RequestMethod.GET/POST/PUT/DELETE)。
@RequestParam注解在方法的参数前面,表示注入请求的参数,它有三个属性:
- value:请求参数名(必须配置),默认为方法参数名;
- required:是否必需,默认为 true,即请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置);
- defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置);
注解在方法的参数前面,配合@RequestMapping("/path")使用表示注入请求的路径变量,参数与路径内大括号里变量的名字一样要相同。如:
RequestMapping(“user/{userId}”) public String getByMacAddress(@PathVariable String userId){ //do something; } @RequestAttribute注解在方法的参数前面,可以被用于访问由过滤器或拦截器创建的、预先存在的请求属性。
@ModelAttribute此注解既可被用于方法、也可用于参数上。
注解在方法上,会在每一个@RequestMapping注解的方法前执行,如果有返回值,则自动将该返回值加入到Model中:
- @ModelAttribute注解void返回值的方法:
- @ModelAttribute注解返回具体对象的方法:
- @ModelAttribute(value="key")注解返回具体对象的方法
- @ModelAttribute和@RequestMapping同时注解一个方法
注解在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入Model中,便于View层使用:
- 直接从Model中获取值
- 从Form表单或URL参数中获取(实际上,不做@RequestMapping注释也能拿到user对象)
- 注解在一个方法的返回值上:
注解在类上,Model属性的生命周期在Request结束后就被销毁,若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes,Spring MVC将在模型中对应的属性暂存到 HttpSession 中,Model属性在Session生命周期结束前都不会被销毁。
Session结束生命周期,有以下两种办法:
- 一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用;
- 一个是当前用户和服务器的交互时间超过默认时间后,Session会失效。
@SessionAttributes有两个属性:
- value:要保存到Session中的参数名称
- typtes:要保存到Session中的参数类型
两个属性k可以搭配使用:
- @SessionAttributes(value="user")
- @SessionAttributes(typtes=User.class)
- @SessionAttributes(value="user", typtes=User.class)把Model中属性名为user且属性类型为User的属性保存到Session中;
- @SessionAttributes(value={"user", "dept"})
- @SessionAttributes(typtes={User.class, Dept.class})
- @SessionAttributes(value={"user", "dept"}, typtes={User.class, Dept.class})把Model中属性名为user且属性类型为User的属性和属性名为dept且属性类型为Dept的属性保存到Session中;
注解在参数上,类似于@ModelAttribute,来访问预先存在的全局会话属性。
@RequestAttribute注解在参数上,类似于@SessionAttribute,来访问请求属性。
@ConfigurationProperties把配置文件的信,读取并自动封装成实体类,例如在配置文件里面,有如下信:
org.csu.springboot_properties.user.name=O大叔Tz org.csu.springboot_properties.user.age=23这时候可以定义一个实体类来装载配置文件信:
@Component @ConfigurationProperties(prefix="user") @Data public class User { private String name; private int age; }或者还可以直接定义在@Bean的注解上,这时Bean实体类就不用@Component和@ConfigurationProperties了
@Bean @ConfigurationProperties(prefix = "user") public ConnectionSettings connectionSettings(){ return new ConnectionSettings(); }这时就可以将配置文件属性自动注入一个实体对象
@Autowired private User usr; @ProfilesSpring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。
任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。
@Configuration @Profile("prod") public class ProdConfiguration { //... } @ControllerAdvice统一处理异常,包含@Component注解。
@ExceptionHandler(Exception.class)注解在方法上,表示遇到这个异常就执行以下方法。
GitHub示例Springboot Study.
版权声明:本文标题:Spring Boot学习笔记5:Springboot常用注解总结 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686807945a105486.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论