@Configuration
用于类,等价于XML配置中配置beans
@Bean
用于方法,为这个Spring容器中的Bean
@Value
用于字段,取yml.properties里面的值
@Controller, @Service, @Repository,@Component
用于类,目前4种注解意思是一样,并没有什么区别,区别只是名字不同
@PostConstruct 和 @PreDestory
用于方法,实现初始化和销毁bean之前进行的操作,只能有一个方法可以用此注释进行注释,方法不能有参数,返回值必需是void,方法需要是非静态的
@PostConstruct在构造方法和init方法(如果有的话)之间得到调用,且只会执行一次
@PreDestory:注解的方法在destory()方法调用后得到执行
引深一点,Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:
1.通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
2.通过 <bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
3.在指定方法上加上@PostConstruct 或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用
但他们之前并不等价。即使3个方法都用上了,也有先后顺序.
Constructor > @PostConstruct >InitializingBean > init-method
@Primary
用于类,自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。
@Lazy(true)
用于类,方法,字段,参数,构造器,用于指定该Bean是否取消预初始化,用于注解类,延迟初始化。
@Autowired
Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
1.可以手动指定按byName方式注入,使用@Qualifier。
//通过此注解完成从spring配置文件中 查找满足Fruit的bean,然后按//@Qualifier指定pean
@Autowired
@Qualifier(“pean”)
public Fruit fruit;
2.如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false)
public Fruit fruit;
@Resource
默认按 byName自动注入,如果找不到再按byType找bean,如果还是找不到则抛异常,无论按byName还是byType如果找到多个,则抛异常。
可以手动指定bean,它有2个属性分别是name和type,使用name属性,则使用byName的自动注入,而使用type属性时则使用byType自动注入。
@Resource(name=”bean名字”)
或
@Resource(type=”bean的class”)
这个注解是属于J2EE的,减少了与spring的耦合。
@Async
java里使用线程用3种方法:
1. 继承Thread,重写run方法
2. 实现Runnable,重写run方法
3. 使用Callable和Future接口创建线程,并能得到返回值。
@Async可视为第4种方法。基于@Async标注的方法,称之为异步方法,这个注解用于标注某个方法或某个类里面的所有方法都是需要异步处理的。被注解的方法被调用的时候,会在新线程中执行,而调用它的方法会在原来的线程中执行。
@Named
@Named和Spring的@Component功能相同。@Named可以有值,如果没有值生成的Bean名称默认和类名相同。比如
@Named public class Person 或
@Named(“cc”) public class Person
@Inject
使用@Inject需要引用javax.inject.jar,它与Spring没有关系,是jsr330规范。
与@Autowired有互换性。
@Singleton
只要在类上加上这个注解,就可以实现一个单例类,不需要自己手动编写单例实现类。
@Valid
使用hibernate-validator.jar进行参数合法性校验。
@Validated
@Valid是对javabean的校验,如果想对使用@RequestParam方式接收参数方式校验使用@Validated
创建全局异常处理类,处理 requestParam 参数校验失败
@Valid是使用hibernateValidation.jar做校验
@Validated是只用springValidator校验机制使用
@Validated与@RequestBody结合使用时,在接口方法里要增加@Valid
@RequestBody
:有个默认属性required,默认是true,当body里没内容时抛异常。请求为json对象
@CrossOrigin
是Cross-Origin ResourceSharing(跨域资源共享)的简写
作用是解决跨域访问的问题,在Spring4.2以上的版本可直接使用。在类上或方法上添加该注解
@RequestParam
作用是提取和解析请求中的参数。@RequestParam支持类型转换,类型转换目前支持所有的基本Java类型
@PathVariable
获取路径变量,绑定到参数变量中
@RequestHeader
获取header变量,绑定到参数变量中
@CookieValue
获取hcookier变量,绑定到参数变量中
@SessionAttributes
获取session属性变量,绑定到参数变量中
@ModelAttribute
注解方法被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。注解参数从model中获取参数
@Scope
默认是单例模式,即@Scope(“singleton”),
singleton:单例,即容器里只有一个实例对象。
prototype:多对象,每一次请求都会产生一个新的bean实例,Spring无法对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,由程序员负责销毁该对象,不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用
request:对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
@ResponseStatus
@ResponseStatus用于修饰一个类或者一个方法,修饰一个类的时候,一般修饰的是一个异常类,当处理器的方法被调用时,@ResponseStatus指定的code和reason会被返回给前端。value属性是http状态码(共71个),比如404,500等。reason是错误信息当修改类或方法时,只要该类得到调用,那么value和reason都会被添加到response里
@RestController
@RestController = @Controller + @ResponseBody。
是2个注解的合并效果,即指定了该controller是组件,又指定方法返回的是String或json类型数据,不会解决成jsp页面,注定不够灵活,如果一个Controller即有SpringMVC返回视图的方法,又有返回json数据的方法即使用@RestController太死板。
灵活的作法是:定义controller的时候,直接使用@Controller,如果需要返回json可以直接在方法中添加@ResponseBody
@ControllerAdvice
官方解释是:It is typically used todefine@ExceptionHandler,
@InitBinder, and@ModelAttribute methods that apply to all@RequestMapping methods
意思是:即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(SQLException.class)
@ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR,reason=”sql查询错误”)
@ResponseBody
public ExceptionResponse handleSQLException(HttpServletRequest request, Exception ex) {
String message = ex.getMessage();
return ExceptionResponse.create(HttpStatus.INTERNAL_SERVER_ERROR.value(), message);
}
}
即表示让Spring捕获到所有抛出的SQLException异常,并交由这个被注解的handleSQLException方法处理,同时使用@ResponseStatus指定了code和reason写到response上,返回给前端。
@RequestMapping
有六个属性,
1.value
alue的uri值为以下三类:
A) 可以指定为普通的具体值;如@RequestMapping(value =”/testValid”)
B) 可以指定为含有某变量的一类值;如@RequestMapping(value=”/{day}”)
C) 可以指定为含正则表达式的一类值;如@RequestMapping(value=”/{textualPart:[a-z-]+}.{numericPart:[\\d]+}”) 可以匹配../chenyuan122912请求。
2.method
指定请求的method类型, GET、POST、PUT、DELETE等;
3.consumes 4.produces:
consumes: 指定处理请求的提交内容类型(Content-Type),例如@RequestMapping(value = ”/test”, consumes=”application/json”)处理application/json内容类型
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
5.params 6.headers:
params: 指定request中必须包含某些参数值是,才让该方法处理。
@GetMapping和@PostMapping
@GetMapping(value = “page”)等价于@RequestMapping(value = “page”, method = RequestMethod.GET)
@PostMapping(value = “page”)等价于@RequestMapping(value = “page”, method = RequestMethod.POST)