Spring Boot常用注解

@RestController 复合注解

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 * @since 4.0.1
	 */
	@AliasFor(annotation = Controller.class)
	String value() default "";
}


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

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

6、@Service

        1)@Service是@Component注解的一个特例,作用在类上;
        2)@Service注解作用域默认为单例;
        3)被@Service注解标注的类会被Spring扫描并注册为Bean;
        4)@Service用于标注服务层组件,表示定义一个bean;
        5)@Service使用时没有传参数,Bean名称默认为当前类的类名,首字母
        小写;使用value作为Bean名字,如@Service(value=”testBeanId”)。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 */
	@AliasFor(annotation = Component.class)
	String value() default "";
}

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

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {

	/**
	 * Alias for {@link #scopeName}.
	 * @see #scopeName
	 */
	@AliasFor("scopeName")
	String value() default "";

	@AliasFor("value")
	String scopeName() default "";

	ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}

value
    singleton    表示该bean是单例的。(默认)
    prototype    表示该bean是多例的,即每次使用该bean时都会新建一个对象。
    request      在一次http请求中,一个bean对应一个实例。
    session      在一个httpSession中,一个bean对应一个实例。

proxyMode
    DEFAULT         不使用代理。(默认)
    NO              不使用代理,等价于DEFAULT。
    INTERFACES      使用基于接口的代理(jdk dynamic proxy)。
    TARGET_CLASS    使用基于类的代理(cglib)。

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

public @interface Autowired {
 
    /**
     * 是否开启自动注入,有些时候我们不想使用自动装配功能,可以将该参数设置成false。
     */
	boolean required() default true;
 
}
 
 
public @interface Resource {
    /**
     * bean的名称
     */
    String name() default "";
 
    String lookup() default "";
 
    /**
     * Java类,被解析为bean的类型
     */
    Class<?> type() default java.lang.Object.class;
 
    enum AuthenticationType {
            CONTAINER,
            APPLICATION
    }
 
    /**
     * 身份验证类型
     */
    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
 
    /**
     * 组件是否可以与其他组件之间共享
     */
    boolean shareable() default true;
 
    String mappedName() default "";
 
    /**
     * 描述
     */
    String description() default "";
}

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

2)@Resource是在语义上被定义为通过其唯一的名称来标识特定的目标组件,
其中声明的类型与匹配过程无关。

区别:
1)所含参数不同
 @Autowired只包含一个参数:required,表示是否开启自动注入,默认是true。
 而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。

2)自动装配方式不同
 @Autowired默认按byType自动装配,而@Resource默认byName自动装配。

3)、注解应用的地方不同
 @Autowired能够用在:构造器、方法、参数、成员变量和注解上,
 @Resource能用在:类、成员变量和方法上。
 
4)​ 提供者不同
 @Autowired 是Spring提供的,@Resource 是J2EE提供的。

5)装配方式不同
  @Autowired默认先按Type进行匹配,如果发现找到多个bean,则又按照Name
方式进行匹配,如果还有多个,则报出异常。

 @Resource的装配顺序如下:
   a.如果同时指定了name和type,则查找name和type唯一匹配的bean,找不到就抛出异常;
   b.如果只是指定了@Resource注解的name,则查找name唯一匹配的bean,找不到就抛出异常;
   c.如果只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值