@Resource的装配顺序:
(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错
然后,区分一下@Autowired和@Resource两个注解的区别:
(1)、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
(2)、@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
Qualifier(指定注入Bean的名称)
如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用
@ResponseBody
加了这个注解的类会将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。
@RestController
@RestController = @Controller + @ResponseBody
写这一个注解就相当于写了后面的两个注解,在返回值是json串的非常方便,但同时也会有一个问题,加了这个注解就不能返回jsp或者html页面,这时可以通过返回视图数据的方式来返回页面。
ModelAndView mv = new ModelAndView("index");
return mv;
@RequestMapping(“xxxx”)
它用于 映射客户端的访问地址,可以被应用于类和方法上面,客户进行访问时,URL应该为类+方法上面的这个注解里面的内容。
格式:@RequestMapping(" ") 双引号里面默认是value的值,
所以@RequestMapping(value = “a”)等价于@RequestMapping(“a”)
除了value之外,@RequestMapping里面还有这些属性
mehod,params,headers
分别为请求方法,请求参数,请求头。
它们之间是与的关系,联合使用会使得请求的映射更加精细
method:可以指定请求的类型。
http中规定请求有四种类型:get,post,put,delete。
params和headers支持简单的表达式:
params1:表示请求必须包含名为params1的请求参数
!params1:表示请求不能包含名为params1的请求参数
params1 != value1:表示请求必须包含名为params1的请求参数,但是其值不能 是value1
{“params1 = value1”, “param2”}:表示请求必须包含名为params1和params2两个请求参数,且params1的值必须为value1
@PathVariable 获取到URL的{ }中参数
@RequestMapping("/delete/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("id = " + id);
return SUCCESS;
}
@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。
@ComponentScan(“com.demo”) 引号里面是要扫描的包路径
@SpringBootApplication这个注解里面集成了@ComponentScan注解,它里面会自动扫描这个类所在包以及子包下面的bean。
所以如果我们要找的bean不在它的所在包或者子包里面,就需要自己再添加一个@ComponentScan注解。例如:
@ComponentScan({“com.demo.springboot”,”com.demo.somethingelse”})
@ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
@import注解是一个可以将普通类导入到spring容器中做管理
@CrossOrigin:@CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用。
通过这个注解可以声明事务,可以添加在类上或者方法上。
在spring boot中 不用再单独配置事务管理,一般情况是我们会在servcie层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在public 方法上。并且主要事务切面的回滚条件。正常我们配置rollbackfor exception时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。
@ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。
@ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理。
@RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以将异常以json的格式返回数据。
@EnableDiscoveryClient基于spring-cloud-commons,@EnableEurekaClient基于spring-cloud-netflix,如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
@Mapper && @MapperScan
Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解
使用@MapperScan可以指定要扫描的Mapper类的包的路径(@MapperScan("com.demo.*.mapper") || @MapperScan("com.test.*.mapper", "com.demo.*.mapper"))
@EnableTransactionManagement && @Transactional
Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement (启注解事务管理,等同于xml配置方式的 )开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。
@Async && @EnableAsync
@EnableAsync注解的意思是可以异步执行,就是开启多线程的意思。可以标注在方法、类上。
为了让@Async注解能够生效,需要在Spring Boot的主程序中配置@EnableAsync
@Async所修饰的函数不要定义为static类型,这样异步调用不会生效
@GetMapping && @PostMapping
Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping},来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP Post映射到 特定的处理方法上。
@LoadBalanced
Spring Cloud的commons模块提供了一个@LoadBalanced注解,方便我们对RestTemplate添加一个LoadBalancerClient,以实现客户端负载均衡。通过源码可以发现这是一个标记注解,我们可以通过ribbon实现客户端的负载均衡功能。
@FeignClient(value=“服务名”,fallbackFactory=实现FallbackFactory的类.class): 实现服务降级