Spring常用注解学习

1.@PathVariable 映射 URL 绑定的占位符

        带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义                                                                                                           通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中 

2.@JsonIgnore

        1)作用

        在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

        2)使用方法

        一般标记在属性或者方法上,返回的json数据即不包含该属性。

        3)注解失效

        如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解              为:  @JSONField(serialize = false),使用方法一样。

        需要把⼀个List<HistoryOrderBean>转换成json格式的数据传递给前台。但实体类中基本属性  字段的值都存储在快照属性字段中。此时我可以在业务层中做处理,把快照属性字段的值赋给实体类中对应的基本属性字段。基本属性字段。最后,我希望返回的json数据中不包含这两个快照字段,那么在实体类中快照属性上加注解@JsonIgnore,那么最后返回的json数据,将不会包含goodsInfo和extendsInfo两个属性值。

3. @Configuration:

        声明当前类为配置类;

4.@Bean:

        注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式;

5.@ComponentScan:

        用于对Component进行扫描;

6.切面(AOP)相关注解:

        Spring支持AspectJ的注解式切面编程。

        @Aspect 声明一个切面

        @After 在方法执行之后执行(方法上)

        @Before 在方法执行之前执行(方法上)

        @Around 在方法执行之前与之后执行(方法上)

        @PointCut 声明切点

7.@Value注解

        1)支持如下方式的注入:

                注入普通字符
                注入操作系统属性
                注入表达式结果
                注入其它bean属性
                注入文件资源
                注入网站资源
                注入配置文件
        2)@Value三种情况的用法。

                ${}是去找外部配置的参数,将值赋过来
                #{}是SpEL表达式,去寻找对应变量的内容
                #{}直接写字符串就是将字符串的值注入进去

8.@Transactional 

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

        @Transactional 注解的属性信息

          name:当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
          propagation:事务的传播行为,默认值为 REQUIRED。

        

        REQUIRED:如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行。

        REQUIREDS_NEW:当前的方法必须启动新事务,并在自己的事务内运行,如果有事务正在运行,应该将它挂起。

        SUPPORTS:如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中。

        NOT_SUPPORTED:当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。       

        MANDATORY:当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常。

        NEVER:当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。

        NESTED:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就会启动一个新的事务,并在它自己的事务内部运行。


isolation:事务的隔离度,默认值采用 DEFAULT。       

        Isolation.DEFAULT:为数据源的默认隔离级别

        isolation=Isolation.READ_UNCOMMITTED:未授权读取级别

                以操作同一行数据为前提,读事务允许其他读事务和写事务,未提交的写事务禁止其他写事务(但允许其他读事务)。此隔离级别可以防止更新丢失,但不能防止脏读、不可重复读、幻读。此隔离级别可以通过“排他写锁”实现。

        iIsolation.READ_COMMITTED:授权读取级别

                以操作同一行数据为前提,读事务允许其他读事务和写事务,未提交的写事务禁止其他读事务和写事务。此隔离级别可以防止更新丢失、脏读,但不能防止不可重复读、幻读。此隔离级别可以通过“瞬间共享读锁”和“排他写锁”实现。

        iIsolation.REPEATABLE_READ:可重复读取级别

                以操作同一行数据为前提,读事务禁止其他写事务(但允许其他读事务),未提交的写事务禁止其他读事务和写事务。此隔离级别可以防止更新丢失、脏读、不可重复读,但不能防止幻读。此隔离级别可以通过“共享读锁”和“排他写锁”实现。

        iIsolation.SERIALIZABLE:序列化级别

                提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可以防止更新丢失、脏读、不可重复读、幻读。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

        
timeout:事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。

        
read-only:指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。

        
rollback-for:用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。

        
no-rollback- for:抛出 no-rollback-for 指定的异常类型,不回滚事务。

 

9. @JsonFormat

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

pubic class User{
    @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
    private Date date;
}

10. @JsonInclude()

        @JsonInclude(JsonInclude.Include.NON_NULL):这个注解放在类头上,返给前端的json里就没有null类型的字段,即实体类与json互转的时候 属性值为null的不参与序列化。

        @JsonInclude(JsonInclude.Include.ALWAYS):默认策略,任何情况下都序列化该字段,和不写这个注解效果一样。

        @JsonInclude(JsonInclude.Include.NON_ABSENT):包含NON_NULL,即为null的时候不序列化。

        @JsonInclude(JsonInclude.Include.NON_DEFAULT):如果字段是默认值的话就不序列化。

        @JsonInclude(JsonInclude.Include.NON_EMPTY):这个属性包含NON_NULL,NON_ABSENT之后还包含如果字段为空也不序列化。这个也比较常用

        @JsonInclude(JsonInclude.Include.NON_DEFAULTS):使用更高级别的默认值。如果用于属性上,则将使用类级别设置(如果存在),否则将使用全局的规则(由ObjectMapper设置)。       

 11.@Slf4j

        @Slf4j来直接使用log对象,简化了一行代码原来使用的就是                logger.info("");
        现在                log.info("")


基本参考这篇文章学习的:https://blog.csdn.net/guorui_java/article/details/107347754,自己补充了一点内容,后续会继续学习记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值