Springboot常用注解

@SpringBootApplication		//标注这个类是一个springboot的应用
 	@Configuration		//spring配置类
	@Component		//说明这也是一个spring的组件

@EnableAutoConfiguration		//自动配置
	@AutoConfigurationPackage		//自动配置包
		@Import(AutoConfigurationPackages.Registrar.class)	//自动配置“包注册”
	@Import(AutoConfigrationImportSelector.class)	//自动配置导入选择
	
//获取所有的配置
List(String) configurations = getCandidateConfigurations(annotationMetadata, attributes);

META-INF/spring.factories:自动配置的核心文件
在这里插入图片描述

@Controller: controller控制器层(注入服务)
@Service : service服务层(注入dao)
@Repository : dao持久层(实现dao访问)

@Component //标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的
public class Dog {}

@Value(“啊黄”) //对它的值进行注入
private String name;

@Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

<property name="属性名" value=" 属性值"/>  
private User user;
https://www.w3cschool.cn/wkspring/rw2h1mmj.html

@ConfigurationProperties(prefix = “user”)// 获取到配置文件数据

public class User {
    private String name;
    private Integer age;
}

Application.yaml
user:
  name: 张三
  age: 12
//加载指定的配置文件
@PropertySource(value = "classpath:jiutou.properties")
public class User {
    @Value("${name}")	//注解从配置文件读取值的用法
    private String name;
    private Integer age;
}
 

@Validated //数据校验

public class User {
    @Email(message="你的邮箱错误")//验证name是否是电子邮箱格式,想要验证必须有@Validated
    private String name;
    private Integer age;
@Email注解报红 是因为新版本需要validation启动器 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-validation</artifactId> 
</dependency>

JSR303校验

@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 对象是否符合正则表达式的规则
.......等等除此以外,我们还可以自定义一些数据校验规则

@override有什么用,以及加不加@override有什么区别
1.简单来说@override注解是告诉编译器,下面的方法是重写父类的方法
2.如果不写@override注解去直接重写方法,编译器是不会判断你是不是正确重写了父类中的方法的。如重写方法时参数与父类不同,程序是不会提示报错的。这会留下一个潜在的bug。当你写了@override注解时,程序会判断你是否正确的重写了父类的对应方法。而且加上此注解后,程序会自动屏蔽父类的方法。

//部门表
@Data //在类上时,简化java代码编写,为该类提供读写属性。简单来说使用这个注解,就不用再去手写getter,setter,equals, canequence,hasCode,toString等方法了,注解后在编译时会自动加进去.

@AllArgsConstructor //使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
@NoArgsConstructor 使用后创建—个无参构造函数
public class Department {

private Integer id;
private String departmentName;

}

@Builder
关于Builder较为复杂一些,Builder的作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数

@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,
但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面。
如果是用@RestController ,请求之后返回的结果如下。
在这里插入图片描述

如果使用 @Controller,返回结果 如下;
在这里插入图片描述

@ResponseBody的作用其实是将java对象转为json格式的数据。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
这个注解表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用【也就是AJAX】。
在使用@RequestMapping后,返回值通常解析为跳转路径。加上@responsebody后,返回结果直接写入HTTP response body中,不会被解析为跳转路径。比如异步请求,希望响应的结果是json数据,那么加上@responsebody后,就会直接返回json数据。

@RequestParam
主要用于将请求参数区域的数据映射到控制层方法的参数上 首先我们需要知道@RequestParam注解主要有哪些参数 value:请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。比如上图中第一个参数如果不设置value=“page”,则前端传入的参数名必须为pageNum,否则在后台接口中pageNum将接收不到对应的数据 required:该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。 defaultValue:参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}" 如果在请求中传入多个同名参数,比如:url?userName=zhl&userName=holley时怎么办? 其实此时传入的数据格式是:“zhl,holley”,即多个数据之间使用逗号分隔开,在后台接口中可以使用数组或者list类型的变量来接收:
public Stringrequestparam8(@RequestParam(value=“userName”) String [] userNames)或者public Stringrequestparam8(@RequestParam(value=“list”) List list)

@PathVariable 映射 URL 绑定的占位符
• 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
• 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。
实例:
SpringMVCTest.java

1.	//@PathVariable可以用来映射URL中的占位符到目标方法的参数中
2.	@RequestMapping("/testPathVariable/{id}")
3.	    public String testPathVariable(@PathVariable("id") Integer id)
4.	    {
5.	        System.out.println("testPathVariable:"+id);
6.	        return SUCCESS;
7.	    }
index.jsp
<a href="springmvc/testPathVariable/1">testPathVariable</a>

@Transactional注解详细使用
一、@Transactional 注解使用注意事项
@Tranasctional注解是Spring 框架提供的声明式注解事务解决方案,我们在开发中使用事务保证方法对数据库操作的原子性,要么全部成功,要么全部失败,在使用@Transactional注解时需要注意以下问题:
1. @Transactional 注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
2. @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类,可以从Spring源码的DefaultTransactionAttribute类里找到判断方法rollbackOn。

@Override
public boolean rollbackOn(Throwable ex) {
return (ex instanceof RuntimeException || ex instanceof Error);
}

         3. 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如:   回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
4. @Transactional注解不能回滚被try{}catch() 捕获的异常。
5. @Transactional注解只能对在被Spring 容器扫描到的类下的方法生效。
其实Spring事务的创建也是有一定的规则,对于一个方法里已经存在的事务,Spring 也提供了解决方案去进一步处理存在事务,通过设置@Tranasctional的propagation 属性定义Spring 事务的传播规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值