springboot中常用注解有哪些呢?
下文笔者讲述SpringBoot中常用注解的简介说明,如下所示
一、spring常用注解
包扫描+组件标注注解 @Component:泛指各种组件 @Controller、@Service、@Repository都可以称为@Component。 @Controller:控制层 @Service:业务层 @Repository:数据访问层
Spring选择器
@Conditional: 当指定的条件都满足时,组件才被注册 @ConditionalOnBean 指定bean在上下文中时,才注册当前bean。用在方法上,则默认依赖类为方法的返回类型 @ConditionalOnClass 指定类在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型 @ConditionalOnCloudPlatform 在指定云平台才注册配置 @ConditionalOnExpression 指定spel为true时注册配置 @ConditionalOnJava 在指定java版本时注册配置 @ConditionalOnJndi @ConditionalOnMissingBean 指定bean不在上下文中时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型 @ConditionalOnMissingClass 指定类不在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型 @ConditionalOnNotWebApplication 不是在web环境才注册配置 @ConditionalOnProperty 配置文件中的值与指定值是否相等,相等才注册配置 @ConditionalOnResource 指定resources都在classpath上才注册配置 @ConditionalOnSingleCandidate 上下文中只有一个候选者bean时才注册配置 @ConditionalOnWebApplication 在web环境才注册配置
注入bean的注解
@Autowired 由spring提供 1.@Autowired可以作用在变量、setter方法、构造函数上 2.有个属性为required,可以配置为false @Resource 由jdk提供 @Primary 让spring进行自动装配的时候 默认使用首选的bean @Autowired 默认按照类型匹配的 @Resource是按照名称匹配 @Autowired如果需要按照名称匹配需要和@Qualifier一起使用
初始化和销毁方法
@Bean(initMethod="init",destoryMethod="destory") @PostConstruct:初始化方法 @PreDestory:销毁方法
Java配置类相关注解
@Configuration:声明当前类为配置类 @Bean:注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式 @ComponentScan:用于对Component进行扫描
@Bean属性支持
@Scope注解是springIoc容器中的一个作用域(方法上,得有@Bean) Singleton:单例,一个Spring容器中只有一个bean实例,默认模式 Protetype:多例,每次获取Bean的时候会有一个新的实例 Request:web项目中,给每个http request新建一个bean Session:web项目中,给每个http request新建一个bean GlobalSession:给每一个 global http session新建一个Bean实例 @Scope(value=“prototype”)
@Value注解
1.基本数值 @Value("张三") private String name; 2.读取配置文件 @Value("${person.nickName}") private String nickName; 3.写SpEL表达式 @Value("#{20-2}") private Integer age;
Enable注解
@EnableAspectAutoProxy:开启对AspectJ自动代理的支持; @EnableAsync:开启异步方法的支持; @EnableScheduling:开启计划任务的支持; @EnableWebMvc:开启web MVC的配置支持; @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持; @EnableJpaRepositories:开启对SpringData JPA Repository的支持; @EnableTransactionManagement:开启注解式事务的支持; @EnableCaching:开启注解式的缓存支持;
加载配置文件
@PropertySource 引入单个properties文件: @PropertySource(value = {"classpath:xxxx/xxxx.properties"}) 引入多个properties文件 @PropertySource(value = {"classpath:xxxx/xxxx.properties","classpath:xxxx/xxxx.properties"}) @ConfigurationProperties指定读取配置文件的规则,比如前缀是什么,不存在的字段是否可以忽略等 @ConfigurationProperties(prefix = "suning.rocketmq")
@Value
@Value("${properties中的键}") private String xxx;
@Import:要导入到容器中的组件
@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class}) public class MainConfig2 { @Scope("prototype") @Bean("person") public Person person() { System.out.println("我是Person"); return new Person("素小暖",25); } }
二、SpringMVC常用注解
@EnableWebMvc:在配置类中开启Web MVC的配置支持 @Controller: @RequestMapping:用于映射web请求,包括访问路径和参数 @ResponseBody:支持将返回值放到response内,而不是一个页面,通常用户返回json数据 @RequestBody:允许request的参数在request体中,而不是在直接连接的地址后面 @PathVariable:用于接收路径参数 如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法 @RestController:相当于@Controller和@ResponseBody的组合 @ControllerAdvice: 全局异常处理,全局数据绑定,全局数据预处理 @ExceptionHandler:用于全局处理控制器里的异常 @ModelAttribute: 1.注释方法 :如果把@ModelAttribute放在方法的注解上时 该Controller的所有方法在调用前,先执行此@ModelAttribute方法可 以把这个@ModelAttribute特性,应用在BaseController当中 所有的Controller继承BaseController 即可实现在调用Controller时,先执行@ModelAttribute方法 如权限的验证(也可以使用Interceptor)等 2.注释一个方法的参数: 当作为方法的参数使用,指示的参数应该从模型中检索 如果不存在,它应该首先实例化,然后添加到模型中, 一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充
三、事务注解
@Transactional 注解放在类级别时 表示所有该类的公共方法都配置相同的事务属性信息 EmployeeService 的所有方法都支持事务并且是只读 当类级别配置了@Transactional,方法级别也配置了@Transactional 应用程序会以方法级别的事务属性信息来管理事务 方法级别的事务属性信息会覆盖类级别的相关配置信息 @Transactional(propagation= Propagation.SUPPORTS,readOnly=true) @Service(value ="employeeService") public class EmployeeService
@Transactional 注解的属性信息
属性名 | 备注 |
name | 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器 |
propagation | 事务的传播行为,默认值为 REQUIRED |
isolation | 事务的隔离度,默认值采用 DEFAULT |
timeout | 事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务 |
read-only | 指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true |
no-rollback- for | 抛出 no-rollback-for 指定的异常类型,不回滚事务 |
四、定时器
@EnableScheduling 开启定时任务功能 @Scheduled 按指定执行周期执行方法 @Schedules 包含多个@Scheduled,可同时运行多个周期配置 @EnableAsync 开启方法异步执行的能力 通过@Async或者自定义注解找到需要异步执行的方法 通过实现AsyncConfigurer接口的getAsyncExecutor()和 getAsyncUncaughtExceptionHandler()方法自定义Executor和异常处理。 @Async 标记方法为异步线程中执行
五、缓存
@EnableCaching 开启缓存配置,支持子类代理或者AspectJ增强 @CacheConfig 在一个类下,提供公共缓存配置 @Cacheable 放着方法和类上,缓存方法或类下所有方法的返回值 @CachePut 每次先执行方法,再将结果放入缓存 @CacheEvict 删除缓存 @Caching 可以配置@Cacheable、@CachePut、@CacheEvict
六、Json常用注解
@JsonIgnoreProperties 此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响 //生成json时将name和age属性过滤 @JsonIgnoreProperties({"name"},{"age"}) public class user { private String name; private int age; } @JsonIgnore 此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样 //生成json 时不生成age 属性 public class user { private String name; @JsonIgnore private int age; } @JsonFormat 此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式 public class User{ @JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”) private Date date; } @transient 当一个属性并非数据库表的字段映射,就务必将其标示为@Transient 否则ORM框架默认其注解为@Basic @JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略 @JsonProperty @JsonProperty 可以指定某个属性和json映射的名称 如我们有个json字符串为{“user_name”:”aaa”}, 而java中命名要遵循驼峰规则,则为userName 通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用 public class SomeEntity { @JsonProperty("user_name") private String userName; } @JsonSerialize 此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码 如序列化一个double时在其后面限制两位小数点 @JsonDeserialize 此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。