Spring Boot常用注解

向右看齐 2024-03-26 11:04 148阅读 0赞

@RestController 复合注解

1、@Controller:控制器,处理http请求;
2、@ResponseBody:通过HttpMessageConverter读取Request Body并反序列化为Object(泛指)对象;
3、 @RestController:此注解相当于@ResponseBody+@Controller合在一起的作用。 RestController使用的效果是将方法返回的对象直接在浏览器上展示成json格式。

  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Controller
  5. @ResponseBody
  6. public @interface RestController {
  7. /**
  8. * The value may indicate a suggestion for a logical component name,
  9. * to be turned into a Spring bean in case of an autodetected component.
  10. * @return the suggested component name, if any (or empty String otherwise)
  11. * @since 4.0.1
  12. */
  13. @AliasFor(annotation = Controller.class)
  14. String value() default "";
  15. }

4、@RequestMapping:此注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上;@GetMapping用于将HTTP get请求映射到特定处理程序的方法注解;@PostMapping用于将HTTP post请求映射到特定处理程序的方法注解;
5、@Component

  1. @Componentspring中的一个注解,它的作用就是实现bean 的注入。
  2. 基于@Component注解有三个扩展,分别是:
  3. @Repository 用于标注持久层组件)
  4. @Service(用于标注业务层组件)
  5. @Controller(用于标注控制层组件)。
  6. 当某个组件不能通过业务进行归类时,可以使用这个注解进行标注;

6、@Service

  1. 1@Service@Component注解的一个特例,作用在类上;
  2. 2@Service注解作用域默认为单例;
  3. 3)被@Service注解标注的类会被Spring扫描并注册为Bean
  4. 4@Service用于标注服务层组件,表示定义一个bean
  5. 5@Service使用时没有传参数,Bean名称默认为当前类的类名,首字母
  6. 小写;使用value作为Bean名字,如@Service(value=”testBeanId”)。
  7. @Target({ElementType.TYPE})
  8. @Retention(RetentionPolicy.RUNTIME)
  9. @Documented
  10. @Component
  11. public @interface Service {
  12. /**
  13. * The value may indicate a suggestion for a logical component name,
  14. * to be turned into a Spring bean in case of an autodetected component.
  15. * @return the suggested component name, if any (or empty String otherwise)
  16. */
  17. @AliasFor(annotation = Component.class)
  18. String value() default "";
  19. }

7、@Scope:@Scope作用在类上和方法上,用来配置 spring bean 的作用域,它标识 bean 的作用域;

  1. @Target({ElementType.TYPE, ElementType.METHOD})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface Scope {
  5. /**
  6. * Alias for {@link #scopeName}.
  7. * @see #scopeName
  8. */
  9. @AliasFor("scopeName")
  10. String value() default "";
  11. @AliasFor("value")
  12. String scopeName() default "";
  13. ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
  14. }
  15. value
  16. singleton 表示该bean是单例的。(默认)
  17. prototype 表示该bean是多例的,即每次使用该bean时都会新建一个对象。
  18. request 在一次http请求中,一个bean对应一个实例。
  19. session 在一个httpSession中,一个bean对应一个实例。
  20. proxyMode
  21. DEFAULT 不使用代理。(默认)
  22. NO 不使用代理,等价于DEFAULT
  23. INTERFACES 使用基于接口的代理(jdk dynamic proxy)。
  24. TARGET_CLASS 使用基于类的代理(cglib)。

8、@Resource和@Autowired都是用来进行依赖注入的注解:

  1. public @interface Autowired {
  2. /**
  3. * 是否开启自动注入,有些时候我们不想使用自动装配功能,可以将该参数设置成false。
  4. */
  5. boolean required() default true;
  6. }
  7. public @interface Resource {
  8. /**
  9. * bean的名称
  10. */
  11. String name() default "";
  12. String lookup() default "";
  13. /**
  14. * Java类,被解析为bean的类型
  15. */
  16. Class<?> type() default java.lang.Object.class;
  17. enum AuthenticationType {
  18. CONTAINER,
  19. APPLICATION
  20. }
  21. /**
  22. * 身份验证类型
  23. */
  24. AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
  25. /**
  26. * 组件是否可以与其他组件之间共享
  27. */
  28. boolean shareable() default true;
  29. String mappedName() default "";
  30. /**
  31. * 描述
  32. */
  33. String description() default "";
  34. }

  1. 1@Autowired是对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
  2. 2@Resource是在语义上被定义为通过其唯一的名称来标识特定的目标组件,
  3. 其中声明的类型与匹配过程无关。
  4. 区别:
  5. 1)所含参数不同
  6. @Autowired只包含一个参数:required,表示是否开启自动注入,默认是true
  7. @Resource包含七个参数,其中最重要的两个参数是:name type
  8. 2)自动装配方式不同
  9. @Autowired默认按byType自动装配,而@Resource默认byName自动装配。
  10. 3)、注解应用的地方不同
  11. @Autowired能够用在:构造器、方法、参数、成员变量和注解上,
  12. @Resource能用在:类、成员变量和方法上。
  13. 4)​ 提供者不同
  14. @Autowired Spring提供的,@Resource J2EE提供的。
  15. 5)装配方式不同
  16. @Autowired默认先按Type进行匹配,如果发现找到多个bean,则又按照Name
  17. 方式进行匹配,如果还有多个,则报出异常。
  18. @Resource的装配顺序如下:
  19. a.如果同时指定了nametype,则查找nametype唯一匹配的bean,找不到就抛出异常;
  20. b.如果只是指定了@Resource注解的name,则查找name唯一匹配的bean,找不到就抛出异常;
  21. c.如果只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

发表评论

表情:
评论列表 (有 0 条评论,148人围观)

还没有评论,来说两句吧...

相关阅读