开发常用注解简介
Spring系
预备理解
bean注入,自动装配
首先了解一下IOC操作Bean管理,bean管理是指(1)spring创建对象 (2)spring注入属性。
当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且
会将其初始化为spring应用上下文中的bean。
bean是计算机自动生成的类,bean是一个由Spring IoC容器实例化、组装和管理的对象
当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。
dao
DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。对外提供相应的接口
三层架构mvc
MVC是Model-View-Controller的简称,即模型-视图-控制器。java web中我们使用三个文件夹:Controller,Service,Dao来构建mvc
实现bean注入 @Component
作用就是实现bean的注入(也就是将标注@Component注解的类交由spring管理),id默认为类的小写
在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:
@Repository
作用于dao层,实现dao访问
@Service
作用于service层
@Controller
作用于controller层
自动装配bean @Autowired与@Resources
@Autowired
spring提供,使用前需要先配置注解的支持
@Autowired可以标注在属性上、方法上和构造器上,来完成自动装配。
注解注入时首先根据byType注入,当接口存在多个实现类且使用@Service注解的默认bean名字时,根据byName注入。在进行byName时,如果bean_id都不是set方法后面的值(setDog,结果id为dog222),可以额外加上注解
@Resources
这个是java自带的,不用导入配置支持
是先byName再byType。可以通过@Resource(name="xxxx")来指定
@ResponseBody
将java对象转为json格式的数据,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中
简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端
@RestController
@RestController 是@Controller和@ResponseBody 的结合
@Configuration
@Configuration是Spring的注解,不是SpringBoot的!早在Spring框架的时候就有使用,但是由于那个时候配置文件还是比较流行,因此@Configuration注解并没有太盛行,甚至很多人就认为它是SpringBoot的注解
作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象
@RequestMapping
可以用于类或者方法,用来使url能够请求到当前实现类的当前方法
@RequestMapping("/testRequest")
public String testRequest(){
return "success";
}
SpringMVC以前版本的@RequestMapping,
如果我们想使用传统的@RequestMapping注释实现URL处理程序,那么它应该是这样的:
@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)
新方法可以简化为:
@GetMapping("/get/{id}")
到了新版本被下面新注释替代,相当于增加的选项:
@GetMapping
用于处理请求方法的GET类型
@PostMapping
用于处理请求方法的POST类型
@PutMapping
@DeleteMapping
@PatchMapping
@PathVariable
为了配合@RequestMapping系进行占位
主要作用:映射URL绑定的占位符
@RequestMapping("/user/{id}")
public String testPathVariable(@PathVariable("id") String id){
System.out.println("路径上的占位符的值="+id);
return "success";
}
假如你的请求为localhost:8080/user/admin,可以输出:
路径上的占位符的值=admin
@RequestParam
如果不使用RestFul风格,Controller实现类的方法的参数要使用@RequestParam 固定前端接收的变量名(如果不这样,url中参数变量名错误不会报错,仍然会转发,只不过参数值为null
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="name") String username){
System.out.println("执行了...");
System.out.println(username);
return "success";
}
如果现在访问localhost:8080/.../anno/testRequestParam?name=zaughter
则显示结果为执行了...zaughter
@ConfigurationProperties
直接看例子,例子来源自我的另一篇文章SpringBoot - Zaughter - 博客园 (cnblogs.com)
实体类
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
yaml配置
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
新增依赖(可以不配置)
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
test
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person; //将person自动注入进来
@Test
public void contextLoads() {
System.out.println(person); //打印person信息
}
}
用于数据校验
常用注解
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
.......等等
除此以外,我们还可以自定义一些数据校验规则