记录 Spring Boot 中使用的常用注解
简单记录 pmsys 使用到的 ,也有没有使用到的
@SpringBootApplication
主类的注解。相当于(@Configuration,@EnableAutoConfiguration , @ComponentScan)及他们的默认属性
PS: 通常建议您将主应用类放在其它类之上的根包中,
@EnableAutoConfiguration注解通常放在主类上,它隐式定义了某些项目的 包搜索的基准起点。
根据 SpringBoot 官网,这三个注解的作用分别是:
@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制@ComponentScan: 扫描被(@Component、@Service、@Repository、@Controller等)注解的 bean,注解默认会扫描该类所在的包下所有的类。@Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
@Component 与 @Configuration
都可以声明配置类,但 @Configuration 更加语义化。
从定义来看,@Configuration 注解本质上还是 @Component。
-
@Component:泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。 -
@Configuration:用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,等价于spring的xml配置文件中的<bean>,作用为:注册bean对象。PS: bean 方法会被 AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 类进行扫描,并用于构建 bean 定义,初始化 Spring 容器
@Repository , @Service , @Controller
传统 MVC 必备三个注解,分别是:
-
@Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。 -
@Service: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。实现接口的形式,为了区别还是取名
@Service("appraiseService") public class AppraiseServiceImpl implements AppraiseService {} -
@Controller: 对应控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
@RestController
在前后端分离的项目中控制层使用 @RestController 注解,该注解是是 @Controller 和 @ResponseBody 的合集。
@RestController 只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务。
如果你需要在Spring4之前开发 RESTful Web服务的话,你需要使用
@Controller并结合@ResponseBody注解
依赖注入 @Autowired 与 @Resource
用于依赖注入,不过 @Autowired 只按照 byType 注入,是 Spring 的;@Resource 默认按 byName 自动注入,也提供按照 byType 注入,是 JDK 的;
被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。
PS: 现在装配是用构造注入,非必须用 Set 注入。不再是直接标注在字段上。
注意,构造注入允许字段被修饰为
final,这表示以后它不能被更改
五大请求 GET、POST、PUT、DELETE、PATCH
-
GET :请求从服务器获取特定资源。举个例子:
GET /users(获取所有学生)@GetMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.GET) -
POST :在服务器上创建一个新的资源。举个例子:
POST /users(创建学生)@PostMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.POST) -
PUT :更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:
PUT /users/12(更新编号为 12 的学生)@PutMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT) -
DELETE :从服务器删除特定的资源。举个例子:
DELETE /users/12(删除编号为 12 的学生)@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE) -
PATCH :更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新),使用的比较少,这里就不举例子了。
@PatchMapping("/profile")等价于@RequestMapping(value = "/profile", method = RequestMethod.PATCH)
地址栏取值 @PathVariable 和 @RequestParam
@PathVariable用于获取路径参数,如上的 userId ,就是用@PathVariable 取。
@RequestParam用于获取查询参数, 取地址栏问号 ? 后的值。
@RequestBody
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且 Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用 HttpMessageConverter 或者自定义的 HttpMessageConverter 将请求的 body 中的 json 字符串转换为 java 对象。
读取配置信息 @Value 及两个没用过
常用就是 @Value 直接读取信息,举个例子:
@Value("${fastdfs.nginx.host}")
private String nginxHost;
配置文件中是:
fastdfs.nginx.host=http://192.168.1.10/
还有两个 @ConfigurationProperties 和 @PropertySource ,学习 10 分钟搞定 SpringBoot 如何优雅读取配置文件?
事务 @Transactional 摘自 JavaGuide
在要开启事务的方法上使用@Transactional注解即可!
@Transactional(rollbackFor = Exception.class)
public void save() {
......
}
我们知道 Exception 分为运行时异常 RuntimeException 和非运行时异常。在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。
@Transactional 注解一般用在可以作用在类或者方法上。
- 作用于类:当把
@Transactional 注解放在类上时,表示所有该类的public 方法都配置相同的事务属性信息。 - 作用于方法:当类配置了
@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。
更多关于关于 Spring 事务的内容请查看:
json 数据处理
-
过滤 json 数据
@JsonIgnoreProperties以及@JsonIgnore -
格式化 json 数据
@JsonFormat
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")
- 扁平化对象
@JsonUnwrapped
定时任务 @Scheduled 和 @EnableScheduling
@Scheduled 标记要调度的方法的注解。必须指定 cron,fixedDelay 或 fixedRate 属性之一。该注解共有8个参数,以下对这个8个参数进行记录
PS : 主类中要加
@EnableScheduling表示开启对定时任务的支持
-
cron: 该参数为cron表达式,从左到右: [秒] [分] [小时] [日] [月] [周]@Scheduled(cron = "0/30 * * * * ?") 表示 30 秒执行一次 -
zone: 时区,cron表达式会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai。该字段我们一般留空。 -
fixedDelay: 从上次调用结束到下一次调用之间的固定时间(以毫秒为单位)
@Scheduled(fixedDelay = 5000) *//上次调用结束后5秒再执行*
fixedDelayString: 与fixedDelay意思相同,只是使用字符串的形式。唯一不同的是支持占位符
@Scheduled(fixedDelayString = "5000") //占位符的使用(配置文件中有配置:time.fixedDelay=5000): @Scheduled(fixedDelayString = "${time.fixedDelay}")
fixedRate: 两次调用之间固定的毫秒数,fixedRateString: 与fixedRate意思相同,只是使用字符串的形式。唯一不同的是支持占位符。initialDelay: 第一次执行fixedRate或者fixedDelay任务之前要延迟的毫秒数initialDelayString: 与initialDelay意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

浙公网安备 33010602011771号