Spring注解

目录

1、@Controller与@RestController

2、@RequestMapping

3、@Autowired和@Resource

4、@Value

5、@Component与@Bean

6、@Transactional

7、@Aspect

8、@Param和@RequestParam

9、@Data

10、@DateTimeFormat与@JsonFormat

12、@Service

13、@JacksonStdImpl

14、@JsonIgnoreProperties

15、@Slf4j

16、@Configuration

17、@EnableScheduling

18、@ResponseBody与@RequestBody

19、@DependsOn

20、@EnableWebSecurity、@EnableGlobalMethodSecurity安全相关注解

21、@Cacheable

22、@PutMapping、@GetMapping、@PostMapping、@RestMapping

23、Swagger2一些常用注解

24、@Target、@Retention、@Decumented

25、@Import

26、@JsonUnwrapped

27、@SneakyThrows

28、@AllArgsConstructor

29、@NoArgsCostructor

30、@Builder


1、@Controller与@RestController

  • @Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。若返回json等内容到页面,则需要加@ResponseBody注解。
  • @RestController是@Controller和@ResponseBody的结合,可以直接返回json页面

2、@RequestMapping

  • value为方法名,method为请求方式:post、get

@RequestMapping("login")

@RequestMappering(value = "login" , method = RequestMethod.GET)[或method = RequestMethod.POST 或 method = {RequestMethod.POST,RequestMethod.GET}]

  • path为路径,params为限制请求参数

@RequsetMapper(path = "login" , params = {"userName = 123" , "password = 123123"})

该例子中的路径请求参数必须带有userName等于123和password等于123123,否则浏览器返回404的错误

  • @RequestMapping 的 headers 属性

用于HTTP协义交互的信息被称为HTTP报文,客户端发送的HTTP报文被称为请求报文,服务器发回给客户端的HTTP报文称为响应报文,报文由报文头部和报文体组成。
请求头部(Request Headers):请求头包含许多有关客户端环境和请求正文的信息,例如浏览器支持的语言、请求的服务器地址、客户端的操作系统等。
响应头部(Rsponse Headers):响应头也包含许多有用的信息,包括服务器类型、日期、响应内容的类型及编码,响应内容的长度等等。

@RequestMapping(path = "/login", headers="Host=localhost:8080")

通过 @RequestMapping 中的 headers 属性,可以限制客户端发来的请求

  • @PathVariable

3、@Autowired和@Resource

@Resource

1)@Resource有两个常用属性name、type,所以分4种情况

  • 指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常
  • 指定name:通过name找到唯一的bean,找不到抛出异常
  • 指定type:通过tpye找到唯一的bean,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException
  • 都不指定:通过字段名作为key去查找,找到则赋值;找不到则再通过字段类型去查找,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException
  • 由J2EE提供,默认按照byName自动注入

2)@Resource装配顺序:

  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  • 如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  • 如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常
  • 如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

@Autowired

  • @Autowired由Spring提供,只按照byType注入
  • @Autowired只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null
  • @Autowired按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解解决@Autowired()@Qualifier("baseDao")

相同点

  • Spring都支持
  • 都可以作用在字段和setter方法上

不同点

  1. Resource是JDK提供的,而Autowired是Spring提供的
  2. Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false))
  3. 指定name的方式不一样@Resource(name="baseDao"),@Autowired()@Qualifier("baseDao")
  4. Resource默认通过name查找,而Autowired默认通过type查找
  • @Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上
  • @Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。
  • @Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

4、@Value

1) 读取配置变量

  • @Value("#{app['pdf.baseUrl']}") Spring
  • @Value("${test.val}") StringBoot

2)设置默认值 

@Value("${test.val:true}") 该变量在没有值的情况下是true

5、@Component与@Bean

注解作用

  • @Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
  • @Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。

两者对比

相同点:两者的结果都是为spring容器注册Bean.

不同点:@Component 通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。

    @Bean 注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑。

理解

  • @Component (@Controller @Service @Respository)作用于类上,只有在我们的SpringBoot应用程序启用了组件扫描并且包含了被注解的类时才有效。通过组件扫描,Spring将扫描整个类路径,并将所有@Component注释类添加到Spring Context,这里有的不足就是会把整个类当成bean注册到spring 容器上,如果这个类中并不是所有方法都需要注册为bean的话,会出现不需要的方法都注册成为bean,这时候必须确保这些不需要的方法也能注册为bean或者在扫描中加filter 过滤这些不需要的bean,否者spring将无法成功启动。
  • @Bean相对来说就更加灵活了,它可以独立加在方法上,按需注册到spring容器,而且如果你要用到第三方类库里面某个方法的时候,你就只能用@Bean把这个方法注册到spring容器,因为用@Component你需要配置组件扫描到这个第三方类路径而且还要在别人源代码加上这个注解,很明显是不现实的。

6、@Transactional

事物回滚。Spring默认抛出的是未检查unchecked异常(继承RuntimeException)或者 Error才回滚事务,其他异常不会触发回滚。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。

注意:@Transactional(rollbackFor=Exception.class) 对于 Exception 和 RuntimeException都是生效的,RuntimeException继承exception。

不生效的情况:

  • 方法不是public
  • 异常在try catch里面

7、@Aspect

没太明白,等明白之后才补充

8、@Param和@RequestParam

  1. @Param用于xml中,使得mapper.xml中的参数与后台的参数对应上,也增强了可读性如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。@Param是mybatis中的注解,用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中
  2. @RequestParam用于controller,可设置value:指定参数名 default:指定变量初始值 require(true默认/false):指定参数是否为必传


9、@Data

注解属性:staticConstructor

本质是Lombok,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法

@Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor : 注在类上,提供类的全参构造
@NoArgsConstructor : 注在类上,提供类的无参构造
@Setter : 注在属性上,提供 set 方法
@Getter : 注在属性上,提供 get 方法
@EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log

10、@DateTimeFormat与@JsonFormat

@DateTimeFormat(pattern = "yyyy-MM-dd"),主要是前后到后台的时间格式的转换

@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8"),主要是后台到前台的时间格式的转换

12、@Service

@Service服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean

13、@JacksonStdImpl

序列化与反序列化

Spring Boot Jackson 自定义JSON序列化和反序列化_小魏小魏我们去那里呀的博客-CSDN博客_jackson json 自定义


14、@JsonIgnoreProperties

  1. JsonIgnoreProperties(ignoreUnknown = true)写在类上之后,就会忽略类中不存在的字段。
  2. @JsonIgnoreProperties({ “password”, “secretKey” })还可以指定要忽略的字段。
  3. @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })在 json 序列化时忽略 bean 中的一些不需要转化的属性

拓展:

@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
Jackson用到的注解(Jackson是springboot默认json转化工具),注解在类上。对于懒加载的属性,在json序列化时忽略该属性。

@JsonIgnore
Jackson用到的注解,注解在属性上,在json序列化时,忽略该属性

@JSONField(serialize = false)
fastjson用到的注解,注解在属性上,在json序列化时,忽略该属性

15、@Slf4j

声明:如果不想每次都写private  final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以用注解@Slf4j

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
    <version>1.16.16</version><!--版本号自己选一个就行-->
</dependency>

16、@Configuration

详解:spring4.0之二:@Configuration的使用 - duanxz - 博客园

17、@EnableScheduling

@Configuration
@EnableScheduling
public class TaskConfig2 {
}

上面是配置类.

某个其他类中:

@Scheduled(cron = "0/2 * * * * ?")
public void scheduleMethod() {
    logger.info(new Date() + ",EnableScheduling ScheduleMethod");
}

输出:

INFO: 2019-01-11 15:02:44 [com.WeatherService:304] Fri Jan 11 15:02:44 CST 2019,EnableScheduling ScheduleMethod
INFO: 2019-01-11 15:02:46 [com.WeatherService:304] Fri Jan 11 15:02:46 CST 2019,EnableScheduling ScheduleMethod
INFO: 2019-01-11 15:02:48 [com.WeatherService:304] Fri Jan 11 15:02:48 CST 2019,EnableScheduling ScheduleMethod
INFO: 2019-01-11 15:02:50 [com.WeatherService:304] Fri Jan 11 15:02:50 CST 2019,EnableScheduling ScheduleMethod

@EnableScheduling的作用与<task:...../>的作用一样会扫描整个项目中的@Scheduled注解

@Configuration类似于xml配置文件中的<beans...../>

18、@ResponseBody与@RequestBody

  1. @ResponseBody的作用其实是将java对象转为json格式的数据,一般在异步获取数据时使用【也就是AJAX】

  2. @RequestBody注解则是将 HTTP 请求正文插入方法中,使用适合的HttpMessageConverter 将请求体写入某个对象。

@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {   
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
    return user;    
}

19、@DependsOn

详解:@DependsOn注解详解_znoone的博客-CSDN博客_dependson注解

20、@EnableWebSecurity、@EnableGlobalMethodSecurity安全相关注解

没太明白,待补充

21、@Cacheable

22、@PutMapping、@GetMapping、@PostMapping、@RestMapping

23、Swagger2一些常用注解

1、@ApiModelProperty

@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改 

  • value–字段说明 
  • name–重写属性名字 
  • dataType–重写属性类型 
  • required–是否必填 
  • example–举例说明 
  • hidden–隐藏

2、@Api

  • value - 字段说明
  • description - 注释说明这个类

3、@ApiOperation

  • value - 字段说明
  • notes - 注释说明
  • httpMethod - 说明这个方法被请求的方式
  • response - 方法的返回值的类型

@ApiResponse

  • code - 响应的HTTP状态码
  • message - 响应的信息内容

24、@Target、@Retention、@Decumented

注解和反射学习笔记_xiaocai_ji的博客-CSDN博客

25、@Import

Spring全解系列 - @Import注解 - 知乎

26、@JsonUnwrapped

27、@SneakyThrows

取代try catch和 throws,将exception处理成RuntimeException

28、@AllArgsConstructor

有参构造

29、@NoArgsCostructor

无参构造

30、@Builder

可以构造对象实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值