Spring Framework2.5引入了Annotation,之后又完善了相关功能。
| Spring注解 | 场景说明 | 备注 |
|---|---|---|
| @Repository | 数据仓储模式 | 数据访问组件,即DAO组件 |
| @Component | 通用组件模式 | 当组件不好归类的时候,我们可以使用这个注解进行标注。 |
| @Service | 服务模式 | 业务层组件 |
| @Controller | Web控制器模式 | 控制层组件,详情见下文 |
| @RestController | 控制层组件 | 包含@Controller、@ResponseBody |
| @Configuration | 配置类模式 | |
| @ImportResource | 替换XML元素 | |
| @Import | 限定@Autowired依赖注入范围 | |
| @ComponentScan | 扫描指定package下标注Spring模式注解的类 |
用于激活@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解的特性。
@Configuration: Spring Boot的配置类
@EnableAutoConfiguration: 开启自动配置类,激活spring的自动装配机制。
@ComponentScan:激活@Component扫描。
组件自动扫描机制
Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标记了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入到spring容器中管理,它的作用和在xml中使用bean节点配置组件一样。
通常用在主类上。
@SpringBootApplication
@MapperScan("com.qianxin.service.dao.*")
@EnableScheduling //@EnableScheduling 注解的作用是发现注解@Scheduled的任务并后台执行
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
| Spring注解 | 场景说明 | 备注 |
|---|---|---|
| @Autowired | Bean依赖注入,只能按类型注入 | spring提供的注解 |
| @Qualifier | 细粒度的@Autowired依赖查找 |
| Java注解 | 场景说明 | 备注 |
|---|---|---|
| @Resource | Bean依赖注入,默认按名称注入,也支持按类型注入 | jdk提供的注解 |
| Spring注解 | 场景说明 | 备注 |
|---|---|---|
| @Bean | Spring只调用一次产生这个Bean对象的方法,随后Spring将这个Bean对象放在自己的IOC容器中进行管理。这些bean都需要在@Configuration注解下进行创建。具体使用参见。 | |
| @DependsOn | 指当前bean所依赖的bean。 | |
| @Lazy | 作用在bean上,表明这个bean延迟加载;作用在方法上,表示这个方法被延迟加载;作用在@Component 注释的类上,表明这个类中所有的bean 都被延迟加载。 | 用于解决循环依赖。 |
| @Primary | 指示当多个候选者有资格自动装配依赖项时,应优先考虑bean。 | 用于一个接口有多种实现时,有此注解的类会被优先考虑。 |
用于标记在一个类上,使用它标记的类就是一个springmcv Controller对象,分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用了@RequestMapping注解的方法才是真正处理请求的处理器。
用于标记在一个方法或类上,用来处理请求地址映射的注解,用于类上,表示类中所有响应请求处理的方法都是以该地址作为父路径,返回值会通过视图解析器解析为实际的物理视图,然后做转发操作。
| 属性 | 说明 |
|---|---|
| value | 指定请求的实际地址 |
| method | 指定请求的method类型 |
| consumes | 指定处理请求的内容提交类型(Content-Type),例如application/josn,text/html |
| produces | 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回 |
| param | 指定request中必须包含的参数值 |
| headers | 指定request中必须包含某些指定的header值,才能让改方法处理请求 |
spring4.3引入:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping,@RequestMapping是他们的父类注解。
org.springframework.web.bind.annotation
@GetMapping相当于@RequestMapping(method = RequestMethod.GET)
@PostMapping相当于@RequestMapping(method = RequestMethod.POST)
同时又引入了三个参数注解:
对应http访问的路径参数。
@GetMapping(value = "/user/{id}")
public ResponseMessage getUser(@PathVariable Long id){
}
适合参数较少,参数固定的情况。
对应http访问的query参数。
| 属性 | 说明 |
|---|---|
| value | 请求参数名(必须配置) |
| required | 是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置) |
| defaultValue | 默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置) |
org.springframework.web.bind.annotation
适用于复杂的数据结构,比如用xml或者json定义的复杂对象。
对应的是http request payload,数据在http请求的body上,也就是在HttpServletRequest.getInputStream里面。
@PostMapping(value = "")
public ResponseMessage modifyUser(@RequestBody User user){
}