Spring/SpringBoot常用注解、一些注解区别

450 阅读6分钟

1、Spring常用注解

注解说明
@Component、 @Controller、@Service、@Repository使用在类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入
@Scope标注Bean的作用范围
Configuration指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解
@ComponentScan用于指定Spring在初始化容器时要扫描的包
@Bean使用在方法上,标注将该方法的返回值存储到Spring容器中
@Import使用@Import导入的类会被Spring加载到IOC容器中
@Aspect、@Before、@After、@Around、@Pointcut用于切面编程(AOP)
  1. @Autowired:自动装配,根据类型自动注入,可以用在字段、方法、构造函数上。
  2. @Resource:自动装配,根据名称自动注入,可以用在字段、方法、构造函数上。
  3. @Component:标记类,表明该类会作为组件类,并告知Spring要为这个类创建bean。
  4. @Service:标记服务层的组件,表明这是一个服务层的组件,并告知Spring要为这个类创建bean。
  5. @Repository:标记持久层的组件,表明这是一个持久层的组件,并告知Spring要为这个类创建bean。
  6. @Controller:标记控制层的组件,表明这是一个控制层的组件,并告知Spring要为这个类创建bean。
  7. @RequestMapping:用于定义请求映射,可以用在类上和方法上。
  8. @RequestParam:用于获取请求参数,可以用在方法参数上。
  9. @PathVariable:用于获取路径变量,可以用在方法参数上。
  10. @ModelAttribute:用于获取模型属性,可以用在方法参数上。
  11. @ResponseBody:用于将方法返回值作为响应体,可以用在方法上。
  12. @RequestBody:用于将请求体转换为方法参数,可以用在方法参数上。

巧记

  1. 可以利用联想记忆法,将这些注解与它们的功能联系起来,比如@Autowired(自动装配;注解)可以联想为“自动装配”,@Resource(资源;财力;才智)可以联想为“根据名称自动注入”,@Controller(控制者;控制器)可以联想为“控制层的组件”等等。(component:组成部分、成分、部件;service:服务、维修;repository:仓库、存放处、智囊;param:参数)

  2. 利用谐音记忆法:比如@Autowired可以联想为“自动搭配”,@Resource可以联想为“根据名字自动注入”,@Controller可以联想为“控制层的组件”等等。

  3. 利用归类记忆法:将这些注解按照功能归类,比如@Autowired、@Resource属于自动装配类,@Component、@Service、@Repository、@Controller属于组件类,@RequestMapping、@RequestParam、@PathVariable、@ModelAttribute属于请求映射类,@ResponseBody、@RequestBody属于响应体类等等。

  4. 利用拼音记忆法:将这些注解的拼音记忆,比如@Autowired可以联想为“zu自动dao配”,@Resource可以联想为“gen根据ming名字zi自动ru注入”,@Controller可以联想为“kong控制层de组件”等等。

2、SpringBoot常用注解

  1. @SpringBootApplication:标注在某个类上,表明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
  2. @EnableAutoConfiguration:开启自动配置功能;
  3. @ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean;
  4. @Configuration:表明该类是一个配置类,用来替代之前的Spring配置文件;
  5. @Bean:将方法的返回值添加到容器中;
  6. @RestController:标注在控制器类上,表示这是一个控制器类,并且是以json格式返回数据;
  7. @RequestMapping:配置url映射;
  8. @Autowired:让Spring自动帮我们注入对应的bean,它可以根据类型或名称来自动装配
  9. @Value:用于注入配置文件中的值;
  10. @EnableScheduling:开启定时任务的支持;
  11. @EnableAsync:开启异步任务的支持;

巧记

可以把SpringBoot的常用注解按照功能分类,比如:

  1. 启动注解:@SpringBootApplication、@EnableAutoConfiguration、@ComponentScan;
  2. 注入注解:@Bean、@Autowired、@Value;
  3. 控制注解:@RestController、@RequestMapping、@EnableScheduling、@EnableAsync。

application:应用、应用程序;configuration:【计】配置、结构、构造;scheduling:安排、为…安排时间;async:异步的、异步通信

3、SpringMVC常见的注解有哪些?

注解说明
@RequestMapping用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径
@RequestBody注解实现接收http请求的json数据,将json转换为java对象
@RequestParam指定请求参数的名称
@PathViriable从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数
@ResponseBody注解实现将controller方法返回对象转化为json对象响应给客户端
@RequestHeader获取指定的请求头数据
@RestController@Controller + @ResponseBody

4、@Autowired 和 @Resource的区别?

@Autowired 和 @Resource 都是 Spring/Spring Boot项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者也有众多不同。

区别:

  1. 来源不同(来自不同的“父类”,其中 @Autowired 是 Spring 定义的注解,而 @Resource 是 Java 定义的注解,它来自于 JSR-250(Java 250 规范提案))
  2. 依赖查找的顺序不同(依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当前类中。而查找又分为两种实现:按名称(byName)查找或按类型(byType)查找,其中 @Autowired 和 @Resource 都是既使用了名称查找又使用了类型查找,但二者进行查找的顺序却截然相反。@Autowired 先根据类型查找,如果存在多个(Bean)再根据名称进行查找;@Resource 先根据名称查找,如果根据名称查找不到,再根据类型进行查找)
  3. 支持的参数不同(@Autowired 只支持设置1个参数,而 @Resource支持设置7个参数)
  4. 依赖注入的用法不同(@Autowired 既支持构造方法注入,又支持属性注入和 Setter 注入,而 @Resource 只支持属性注入和 Setter 注入)
  5. 编译器 IDEA 的提示不同(当注入 Mapper 对象时,使用 @Autowired 注解编译器会提示错误,而使用 @Resource 注解则不会提示错误。)

详见:www.cnblogs.com/vipstone/p/…

5、@component 和 @bean 的区别

  1. 作用对象不同:@Component 注解作用于,而 @Bean 注解作用于方法
  2. @Component 通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean 告诉了 Spring 这是某个类的实例,当我们需要用它的时候还给我。
  3. @Bean 注解比 @Component 注解的自定义性更强,而且很多地方我们只能通过 @Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring 容器时,只能通过 @Bean 来实现。