springboot:常用注解

x33g5p2x  于2022-02-24 转载在 Spring  
字(5.5k)|赞(0)|评价(0)|浏览(321)

springboot:常用注解

一、spring常用注解

包扫描+组件标注注解

  1. @Component:泛指各种组件
  2. @Controller@Service@Repository都可以称为@Component
  3. @Controller:控制层
  4. @Service:业务层
  5. @Repository:数据访问层

选择器

  1. @Conditional,当指定的条件都满足时,组件才被注册
  2. @ConditionalOnBean,指定bean在上下文中时,才注册当前bean。用在方法上,则默认依赖类为方法的返回类型
  3. @ConditionalOnClass,指定类在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
  4. @ConditionalOnCloudPlatform,在指定云平台才注册配置
  5. @ConditionalOnExpression,指定speltrue时注册配置
  6. @ConditionalOnJava,在指定java版本时注册配置
  7. @ConditionalOnJndi
  8. @ConditionalOnMissingBean,指定bean不在上下文中时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
  9. @ConditionalOnMissingClass,指定类不在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
  10. @ConditionalOnNotWebApplication,不是在web环境才注册配置
  11. @ConditionalOnProperty,配置文件中的值与指定值是否相等,相等才注册配置
  12. @ConditionalOnResource,指定resources都在classpath上才注册配置
  13. @ConditionalOnSingleCandidate,上下文中只有一个候选者bean时才注册配置
  14. @ConditionalOnWebApplication,是在web环境才注册配置

注入bean的注解

  1. @Autowired:由spring提供
  2. 1.@Autowired可以作用在变量、setter方法、构造函数上
  3. 2.有个属性为required,可以配置为false
  4. @Resource:由jdk提供
  5. @Primary:让spring进行自动装配的时候,默认使用首选的bean
  6. @Autowired是默认按照类型匹配的,@Resource是按照名称匹配的,@Autowired如果需要按照名称匹配需要和@Qualifier一起使用

初始化和销毁方法

  1. @Bean(initMethod="init",destoryMethod="destory")
  2. @PostConstruct:初始化方法;@PreDestory:销毁方法

Java配置类相关注解

  1. @Configuration:声明当前类为配置类
  2. @Bean:注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式
  3. @ComponentScan:用于对Component进行扫描

@Bean的属性支持

  1. @Scope注解是springIoc容器中的一个作用域(方法上,得有@Bean
  2. Singleton:单例,一个Spring容器中只有一个bean实例,默认模式
  3. Protetype:多例,每次获取Bean的时候会有一个新的实例
  4. Requestweb项目中,给每个http request新建一个bean
  5. Sessionweb项目中,给每个http request新建一个bean
  6. GlobalSession:给每一个 global http session新建一个Bean实例
  7. @Scope(value=“prototype”)

@Value注解

  1. 1.基本数值
  2. @Value("张三")
  3. private String name;
  4. 2.读取配置文件
  5. @Value("${person.nickName}")
  6. private String nickName;
  7. 3.SpEL表达式
  8. @Value("#{20-2}")
  9. private Integer age;

Enable***注解

  1. @EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
  2. @EnableAsync:开启异步方法的支持;
  3. @EnableScheduling:开启计划任务的支持;
  4. @EnableWebMvc:开启web MVC的配置支持;
  5. @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
  6. @EnableJpaRepositories:开启对SpringData JPA Repository的支持;
  7. @EnableTransactionManagement:开启注解式事务的支持;
  8. @EnableCaching:开启注解式的缓存支持;

加载配置文件

@PropertySource

  • 引入单个properties文件:
  1. @PropertySource(value = {"classpath:xxxx/xxxx.properties"})
  • 引入多个properties文件
  1. @PropertySource(value = {"classpath:xxxx/xxxx.properties","classpath:xxxx/xxxx.properties"})

@ConfigurationProperties指定读取配置文件的规则,比如前缀是什么,不存在的字段是否可以忽略等

  1. @ConfigurationProperties(prefix = "suning.rocketmq")

@Value

  1. @Value("${properties中的键}")
  2. private String xxx;

@Import:要导入到容器中的组件

  1. @Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
  2. public class MainConfig2 {
  3. @Scope("prototype")
  4. @Bean("person")
  5. public Person person() {
  6. System.out.println("我是Person");
  7. return new Person("素小暖",25);
  8. }
  9. }

二、SpringMVC常用注解

  1. @EnableWebMvc:在配置类中开启Web MVC的配置支持
  2. @Controller:
  3. @RequestMapping:用于映射web请求,包括访问路径和参数
  4. @ResponseBody:支持将返回值放到response内,而不是一个页面,通常用户返回json数据
  5. @RequestBody:允许request的参数在request体中,而不是在直接连接的地址后面
  6. @PathVariable:用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法
  7. @RestController:相当于@Controller@ResponseBody的组合
  8. @ControllerAdvice:
  9. 全局异常处理,全局数据绑定,全局数据预处理
  10. @ExceptionHandler:用于全局处理控制器里的异常
  11. @ModelAttribute:
  12. 1.注释方法 :如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等
  13. 2.注释一个方法的参数:当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充

三、事务注解

@Transactional 注解放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息。EmployeeService 的所有方法都支持事务并且是只读。当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。

  1. @Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
  2. @Service(value ="employeeService")
  3. public class EmployeeService

@Transactional 注解的属性信息

属性名说明
name当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
propagation事务的传播行为,默认值为 REQUIRED。
isolation事务的隔离度,默认值采用 DEFAULT。
timeout事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
read-only指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
no-rollback- for抛出 no-rollback-for 指定的异常类型,不回滚事务。

四、定时器

  1. @EnableScheduling,开启定时任务功能
  2. @Scheduled,按指定执行周期执行方法
  3. @Schedules,包含多个@Scheduled,可同时运行多个周期配置
  4. @EnableAsync,开启方法异步执行的能力,通过@Async或者自定义注解找到需要异步执行的方法。通过实现AsyncConfigurer接口的getAsyncExecutor()和getAsyncUncaughtExceptionHandler()方法自定义Executor和异常处理。
  5. @Async,标记方法为异步线程中执行

五、缓存

  1. @EnableCaching,开启缓存配置,支持子类代理或者AspectJ增强
  2. @CacheConfig,在一个类下,提供公共缓存配置
  3. @Cacheable,放着方法和类上,缓存方法或类下所有方法的返回值
  4. @CachePut,每次先执行方法,再将结果放入缓存
  5. @CacheEvict,删除缓存
  6. @Caching,可以配置@Cacheable@CachePut@CacheEvict

六、Json常用注解

@JsonIgnoreProperties

此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响

  1. //生成json时将name和age属性过滤
  2. @JsonIgnoreProperties({"name"},{"age"})
  3. public class user {
  4. private String name;
  5. private int age;
  6. }

@JsonIgnore

此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样

  1. //生成json 时不生成age 属性
  2. public class user {
  3. private String name;
  4. @JsonIgnore
  5. private int age;
  6. }

@JsonFormat

此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式

  1. public class User{
  2. @JsonFormat(pattern = yyyy-MM-dd HH-mm-ss”)
  3. private Date date;
  4. }

@Transient

如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic

@JsonIgnoreType

标注在类上,当其他类有该类作为属性时,该属性将被忽略

@JsonProperty

@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},
而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用

  1. public class SomeEntity {
  2. @JsonProperty("user_name")
  3. private String userName;
  4. }

@JsonSerialize

此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点

@JsonDeserialize

此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize

相关文章