1.常用注解及作用
1.1 Spring相关注解
@Autowired、@Resource、@Component
分享一篇关于@Autowired和@Resource非常好的文章:https://www.cnblogs.com/xrq730/p/5313412.html
@Autowired :默认按类型装配,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource :它的作用相当于 @Autowired,只不过** @Autowired 按 byType** 自动注入,面**@Resource 默认按 byName **自动注入,当找不到与名称匹配的bean才会按类型装配
@Controller:用于标注控制层组件。
@Service:用于标注业务层组件。
@Repository:标注一个DAO组件类。
@component: (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>
)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@Autowired + @Qualifier
获取bean,等于@Resource
1.2 SpringBoot相关注解
@SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在启动类上。
@ComponentScan
组件扫描。如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean。
@Configuration
指出该类是 Bean 配置的信息源,相当于XML中的<beans></beans>,一般加在主类上。
@EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
@Slf4j
在类上添加@Slf4j注解,在方法中直接使用log。
@ImportResource
通过locations属性加载对应的xml配置文件,同时需要配合@Configuration注解一起使用,定义为配置类
@EnableScheduling
定时任务注解。
@EnableDiscoveryClient
基于spring-cloud-commons,并且在classpath中实现。
@EnableEurekaClient
基于spring-cloud-netflix,只能为eureka作用。
就是如果选用的注册中心是eureka推荐@EnableEurekaClient,如果是其他的注册中心推荐使用@EnableDiscoveryClient,如果classpath中添加了eureka,则它们的作用是一样的。
@PropertySource
可以知道@Value和@ConfigurationProperties都可以用于获取配置文件的属性值,不过有个细节容易被忽略,那就是,这两个注解在Springboot项目中都是获取默认配置文件的属性值,也就是application.yml或者application.properties的属性值
不过我们想要配属性的话,肯定都不能全都往默认配置文件里堆的,如果想引用其它配置文件的属性值,就可以使用本博客介绍的@PropertySource注解
@EnableEncryptableProperties
用于加密
@EnableTransactionManagement
Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。
关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。
1.3 SpringMVC相关注解
@EnableWebMvc
在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@Controller
声明该类为SpringMVC中的Controller
@RequestMapping
用于映射Web请求,包括访问路径和参数(该注解贴在类或方法上)
@ResponseBody
支持将返回值放在response内,而不是一个页面,通常用户返回json数据(该注解贴在返回值旁或方法上)
@RequestBody
允许request的参数在request体中,而不是在直接连接在地址后面。(放在形参前)
@PathVariable
用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@RestController
该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
1.4 面向切面相关
@Aspect
面向切面编程注解,Spring AOP 中用来自定义切面
@Before
方法前执行
@After
方法后执行
@Around
环绕执行
@Scheduled
执行计划
1.5 Dubbo相关常用注解
@Service
表示提供者
@Reference
表示消费者
@EnableDubbo
启用Dubbo整合配置
1.6 缓存
@Cacheable
最常用的一个,若缓存中没有对应键,则执行方法,并把返回值放入缓存,如果有则从缓存中取,不执行方法
@CacheEvict
删除缓存
@CachePut
修改缓存
@Caching
同时使用上面多个的时候使用
@CacheConfig
放在类上统一类中的其它缓存注解,如下相当于在这个类中的其它所有缓存注解都被默认加上了cacheNames = "",cacheManager = ""
1.7 @Value
使用@Value可以为属性字段赋值
1、基本数值
2、可以写SpEL; #{}
3、可以写${};取出配置文件【properties】中的值(在运行环境变量里面的值)
配置类
使用@PropertySource读取外部配置文件中的k/v保存到运行的环境变量中;
加载完外部的配置文件以后使用${}取出配置文件的值
@PropertySource(value={"classpath:/person.properties"}) @Configuration public class MainConfigOfPropertyValues { @Bean public Person person(){ return new Person(); } }
bean
1 public class Person {
2 @Value("张三")
3 private String name;
4
5 @Value("#{20-2}")
6 private Integer age;
7
8 @Value("${person.nickName}")
9 private String nickName;
10 }
具体详情区别网址:https://blog.csdn.net/woheniccc/article/details/79804600
1.8 @ComponentScan
自动扫描指定包下所有使用@Service,@Component,@Controller,@Repository的类并注册
示例:
@ComponentScan(value="com.atguigu",includeFilters = { @Filter(type=FilterType.ANNOTATION,classes={Controller.class}), @Filter(type=FilterType.ASSIGNABLE_TYPE,classes={BookService.class}), @Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class}) },useDefaultFilters = false) //excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件 //includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件, 需设置useDefaultFilters = false //FilterType.ANNOTATION:按照注解 //FilterType.ASSIGNABLE_TYPE:按照给定的类型; //FilterType.ASPECTJ:使用ASPECTJ表达式 //FilterType.REGEX:使用正则指定 //FilterType.CUSTOM:使用自定义规则
1.9 @Bean的属性支持
@Scope 设置Spring容器如何新建Bean实例(该注解贴在方法上,得有@Bean)
其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式)
Protetype (每次调用新建一个bean)
Request (web项目中,给每个http request新建一个bean)
Session (web项目中,给每个http session新建一个bean)
2.0 事务注解 @Transactional
在 Spring 中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式
编程式事务管理:编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。对于编程式事务管理,spring 推荐使用 TransactionTemplate。声明式事务管理:建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过 @Transactional 就可以进行事务操作,更快捷而且简单。推荐使用
2.1 @Lazy
单实例bean:默认在容器启动的时候创建对象;
懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;