Spring Boot(十六):Spring Boot经常使用注解介绍及使用

1、项目配置注解html

一、@SpringBootApplication前端

这是一个注解组合,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。java

(1) @SpringBootConfiguration 继承自@Configuration,对于熟悉spring的开发者而言,此标注当当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例归入到spring容器中,而且实例名就是方法名。web

(2)@EnableAutoConfiguration 这个注解就是springboot能自动进行配置的魔法所在。主要经过此注解,能将全部符合自动配置条件的bean的定义加载到spring容器中,好比根据spring-boot-starter-web,来判断你的项目是否须要添加webmvc和tomcat,就会自动的帮你配置web项目中所须要的默认配置。须要排除一些无需自动配置的类时,可利用exclude进行排除。spring

(3)@ComponentScan 会扫描当前包及其子包下被@Component, @Controller,@Service,@Repository 等注解标记的类并归入到spring容器中进行管理数据库

二、@MapperScanjson

springboot支持mybatis组件的一个注解,经过此注解指定mybatis接口类的路径,便可完成对mybatis接口的扫描。后端

它和@mapper注解是同样的做用,不一样的地方是扫描入口不同。@mapper须要加在每个mapper接口类上面。因此大多数状况下,都是在规划好工程目录以后,经过@MapperScan注解配置路径完成mapper接口的注入。跨域

添加mybatis相应组建依赖以后。就可使用该注解。缓存

三、资源导入注解

@ImportResource、@Import、@PropertySource这三个注解都是用来导入自定义的一些配置文件。

@ImportResource(locations={}) 导入其余xml配置文件,须要标准在主配置类上。

导入property的配置文件 @PropertySource指定文件路径,这个至关于使用spring的<importresource/>标签来完成配置项的引入。

@import注解是一个能够将普通类导入到spring容器中作管理

2、controller层

一、@Controller和@RestController

@RestController是spring4以后加入的注解,本来在@Controller中返回json须要@ResponseBody来配合,若是直接用@RestController替代@Controller就不须要再配置@ResponseBody,默认返回json格式。而@Controller是用来建立处理http请求的对象,通常结合@RequestMapping使用。

二、@CrossOrigin

@CrossOrigin(origins="",maxAge=1000)

这个注解主要是为了解决跨域访问的问题。这个注解能够为整个controller配置启用跨域,也能够在方法级别启用。

咱们在项目中使用这个注解是为了解决微服务在作定时任务调度编排的时候,会访问不到spider节点而出现跨域问题。

三、@Autowired

自动装配。

须要从bean工厂中获取一个bean时,spring会自动为咱们装配该bean中标记为@Autowired的元素。

四、@EnableCaching

这个注解是spring framework中的注解驱动的缓存管理功能。做用至关于spring配置文件中的cache manager标签。

五、@RequestMapping

一个用来处理请求地址映射的注解,可用于类和方法上。用于类上,表示类中的全部响应请求的方法都是以该地址做为父路径。

经常使用属性:

(1)value:指定请求的实际地址,指定的地址能够是URI Template模式;

(2)method:指定请求的method方法,GET、POST、PUT、DELETE等;

(3)consumes:指定处理请求的提交内容类型(content-type),例如application/json、text/html;

(4)produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

(5) params: 指定request中必须包含某些参数值是,才让该方法处理。

(6)headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

经常使用的就是value和method。

其简化注解有:

@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)

六、@RequestBody和@ResponseBody

@RequestBody注解容许request的参数在reqeust体中,经常结合前端POST请求,进行先后端交互。

@ResponseBody注解支持将的参数在reqeust体中,一般返回json格式给前端。

七、@PathVariable、@RequestParam、@RequestAttribute

@PathVariable用来接收参数,如/path/001,可接收001做为参数

@GetMapping("/path/{id}")
public String PathVariable(@PathVariable("id")String id){
    return "id:"+id;
}

@RequestParam 用来接收URL中的参数,如/param?id=001,可接收001做为参数

@GetMapping("/param")
public String param(@RequestParam("id")String id){
    return "id:"+id;
}

@RequestAttribute用于访问由过滤器或拦截器建立的、预先存在的请求属性,效果等同与request.getAttrbute()。

@GetMapping("/req/attr")
public String reqAttr(@RequestAttribute("id")String id){
    return "id:"+id;
}

八、@ModelAttribute

主要是绑定请求参数到指定对象上,此注解可被用于方法、参数上。

运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,而且会将这个对象自动加入到modelMap中,便于view层使用;

运用在方法上,会在每个@RequestMapping标注的方法前执行,若是有返回值,则自动将返回值加入到ModelMap中;

因为如今都采用先后端分离开发,故此注解相对用的较少,但对于一些在每次请求前须要进行一些额外操做时。使用此注解依然是个选择,好比进行统一的业务校验等,但使用此注解实现相似功能时须要注意,使用异步调用时,好比callable或者DeferredResult时,被此注解的方法会执行两次,由于异步请求时,是挂起另外一个线程去从新执行,对于配置了拦截器,它们的执行顺序为:

preHandle ---->
afterConcurrentHandlingStarted ----> 
Controller---->
preHandler----> 
postHandler ----> 
afterCompletion

3、service层注解、持久层注解

一、@Component、@Service、@Repository

这三者都是申明一个单例的bean类并归入spring容器中,后二者其实都是继承于@Component。

(1) @Component 最普通的组件,能够被注入到spring容器进行管理。

经过这个注解的分层管理,就能将请求处理,业务逻辑处理,数据库操做处理分离出来,为代码解耦,也方便了之后项目的维护和开发。

因此咱们在正常开发中,若是能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。

(2) @Repository 做用于持久层

(3) @Service 做用于业务逻辑层

一般一些类没法确实是使用@service仍是@Component时,注解使用@Component,好比Redis的配置类等。

二、@Transational

经过这个注解能够声明事务,能够添加在类上或者方法上。

在spring boot中 不用再单独配置事务管理,通常状况是咱们会在servcie层添加了事务注解,便可开启事务。要注意的是,事务的开启只能在public 方法上。而且主要事务切面的回滚条件。正常咱们配置rollbackfor exception时 ,若是在方法里捕获了异常就会致使事务切面配置的失效。

相关文章
相关标签/搜索