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进行装配,找不到或者找到多个,都会抛出异常。
还没有评论,来说两句吧...