springBoot常用注解

各种注解

@Autowired

@Autowired自动装配通过类型、名字

直接在属性上使用即可,也可以在set方式上 使用

使用Autowired我们可以不用编写set了,前提是你这个自动装配的属性在ioc(spring)容器中是存在的,且符合名字byName

科普:

@Nullable
@Nullable   字段标记了这个注解,说明这个字段可以为null
public @interface Autowired {    boolean required() default true;}
public class People {    //如果显示定义了Autowired的requireed属性为false,说明这个对象可以为null    @Autowired(required = false)    private Dog dog;    @Autowired    private Cat cat;    private String name;	//name可以为null的注解    public People(@Nullable String name) {        this.name = name;    }}
@Qualifier

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成时。

我们可以使用**@Qualifier**(value = “xxx”)去 配置@Autowired的使用,指定一个唯一的bean对象注入

<bean id="cat" class="com.xie.pojo.Cat"/>    <bean id="dog3"  class="com.xie.pojo.Dog"/>    <bean id="dog2"  class="com.xie.pojo.Dog"/>
public class People {    //如果显示定义了Autowired的requireed属性为false,说明这个对象可以为null    @Autowired    @Qualifier(value = "dog2")    private Dog dog;    @Autowired    private Cat cat;    private String name;}

@Resourcez注解

@Resourcez自动装配通过名字、类型

<bean id="cat1" class="com.xie.pojo.Cat"/>    <bean id="cat2" class="com.xie.pojo.Cat"/>    <bean id="dog1"  class="com.xie.pojo.Dog"/>    <bean id="dog2"  class="com.xie.pojo.Dog"/>    <!-- autowire:    byName :会自动在容器上下文中查找和自己对象set方法后面的值对应的bean id    byType :会自动在容器上下文中查找和自己对象类型相同的bean ,-->    <bean id="people" class="com.xie.pojo.People"/>

指定一个唯一的bean对象注入

@Resource(name = "dog1")private Dog dog;@Resource(name = "cat1")private Cat cat;

小结:@Resourcez和@Autowired的区别:

  • 都是可以自动装配的,都可以放在属性字段上
  • 执行顺序不同:
    • @Autowired默认通过byType的方式实现,如果找不到名字则通过byName,而且必须要求这个对象存在【常用】
    • @Resourcez 默认通过byName的方式实现,如果找不到名字则通过byType

@Component组件

放在类上,说明这个类被spring管理了,就是bean

@Component组件:等价于<bean id="user" class="com.xie.pojo.User"/>
@Componentpublic class User {    public String name = "秦馨";}

@Value

注入

@Componentpublic class User {    public String name ;    //相当于<property name="name" value="can"/>    @Value("can")    public void setName(String name) {        this.name = name;    }}

mvc三层架构注解

dao 【 @Repository】
service【@Service】
controller【@Controller】
@Configuration 代表一个配置类,就和beans.xml一样的
lombok几个基本注解的使用
@Data
@AllArgsConstructor
@NoArgsConstructor@Builder

lombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。

使用lombok注解,目的和作用就在于不用再去写经常反复去写的(如Getter,Setter,Constructor等)一些代码了。

首先,用到的几个注解:

  • @Data
    使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。
  • @AllArgsConstructor 使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
  • @NoArgsConstructor 使用后创建一个无参构造函数
  • @Builder
    关于Builder较为复杂一些,Builder的作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数

@Dict

  1. **@Dict(dicCode = “status”)**时

字典翻译注解 @Dict : 用于列表字段字典翻译,将数据库某一列的值按照字典配置翻译成对应的文字描述。(比如字段status存的值是1,会自动生成一个翻译字段 status_dictText 值是‘已付款’)

  1. **@Dict(dicCode = “id”,dictTable = “sys_user”,dicText = “realname”)**时

@Dict(dicCode = “id”,dictTable = “sys_user”,dicText = “realname”)
private String managerId;

dicCode为关联表的组件
dictTable为关联表
dicText 为需要显示的内容

@Target

@Target:注解的作用目标

@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包

@Retention

@Retention:注解的保留位置

RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
@Document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解

@TableField

MyBatisPlus有个不起眼的字段@TableField,一般不是必须的。但是他有一个属性exist,是表示这个字段在数据库中是否存在(是否实体字段),与JPA的@Transient是类似的。
于是乎,加个@TableField(exist = false)搞定

@TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
@TableField(exist = true):表示该属性为数据库表字段。

@Accessors 属性说明

该字段共有三个属性,分别是 fluent,chain,prefix

fluent 属性

不写默认为false,当该值为 true 时,对应字段的 getter 方法前面就没有 get,setter 方法就不会有 set。

img

chain 属性

不写默认为false,当该值为 true 时,对应字段的 setter 方法调用后,会返回当前对象。

img

prefix 属性

该属性是一个字符串数组,当该数组有值时,表示忽略字段中对应的前缀,生成对应的 getter 和 setter 方法。

比如现在有 xxName 字段和 yyAge 字段,xx 和 yy 分别是 name 字段和 age 字段的前缀。

那么,我们在生成的 getter 和 setter 方法如下,它也是带有 xx 和 yy 前缀的。

img

如果,我们把它的前缀加到 @Accessors 的属性值中,则可以像没有前缀那样,去调用字段的 getter和 setter 方法。

img

@EqualsAndHashCode(callSuper = false)

注解的作用就是自动的给model bean实现equals方法和hashcode方法

两个model的代码我就截图啦:父类 TV.java 和 子类 小米TV.java,使用这个注解@EqualsAndHashCode(callSuper = false)

大å¸å

小米tv继承tv,从继承角度讲tv有的属性,小米tv也是有的。

看测试main方法

 
import com.lxk.model.XiaoMiTV;
 
/**
 * 测试@EqualsAndHashCode注解的使用
 *
 * @author LiXuekai on 2019/5/10
 */
public class EqualsAndHashCodeTest {
    public static void main(String[] args) {
        XiaoMiTV tv1 = new XiaoMiTV("123", "lxk", 1L, "白");
        XiaoMiTV tv2 = new XiaoMiTV("456", "sql", 1L, "白");
        System.out.println(tv1.equals(tv2));
    }
}

运行结果图:

大å¸å

这个因为咱在子类里面这么使用**@EqualsAndHashCode(callSuper = false) ,不调用父类的属性**,那么子类属性里面的相同的话,那hashcode的值就相同啦,所以代码里面的2个tv的equals方法的返回值是true

把@EqualsAndHashCode(callSuper = false) 的false改成true

大å¸å

@EqualsAndHashCode(callSuper = true),那就是用自己的属性和从父类继承的属性 来生成hashcode

@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集, @EqualsAndHashCode默认是false。

@TableId(type =)

1,ASSIGN_ID(雪花算法

如果不设置类型值,默认则使用IdType.ASSIGN_ID策略(自3.3.0起)。该策略会使用雪花算法自动生成主键ID,主键类型为长整型或字符串(分别对应的MySQL的表字段为BIGINT和VARCHAR)

  • 雪花算法(雪花)是微博开源的分布式ID生成算法其核心思想就是:使用一个64位的长型的数字作为全局唯一ID。在分布式系统中的应用十分广泛,且ID引入了时间戳,基本上保持自增的。

哥伦比亚特区:SpringBoot-MyBatis-Plus使用详解3(主键策略,UUID,Sequence)

2,ASSIGN_UUID(排除中划线的UUID

如果使用IdType.ASSIGN_UUID策略,并重新自动生成排除中划线的UUID作为主键。主键类型为String,对应MySQL的表分段为VARCHAR(32)

提示:该策略使用接口IdentifierGenerator的方法nextUUID

哥伦比亚特区:SpringBoot-MyBatis-Plus使用详解3(主键策略,UUID,Sequence)

3,AUTO(数据库ID自增)

对于像MySQL这样的支持主键自动递增的数据库,我们可以使用IdType.AUTO策略。

哥伦比亚特区:SpringBoot-MyBatis-Plus使用详解3(主键策略,UUID,Sequence)

4,INPUT(插入前自行设置主键值)

(1)针对有序列的数据库:Oracle,SQLServer等,当需要建立一个自增序列时,需要用到序列

@JsonFormat

@DateTimeFormat

@JsonFormat 默认是标准时区的时间,多出现少8小时的情况
使用时,按需求加上时区 北京时间 东八区 timezone=”GMT+8”
作用:后台的时间 格式化 发送到前台

@DateTimeFormat 接受前台的时间格式 传到后台的格式

import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;


public class CusDevPlan {   
    private Integer id;
    private String planItem;
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date planDate;
    ...
}

@EnableCaching注解

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

@Slf4j的使用及作用

该注解的作用:
该注解的作用主要是操作在idea中的控制台中打印的日志信息。该注解相当于代替了以下的代码:private final Logger logger = LoggerFactory.getLogger(当前类名.class);

具体如下:

img

而private final Logger logger = LoggerFactory.getLogger(当前类名.class);该行代码的作用是什么?

@Slf4j的注解相当于private final Logger logger = LoggerFactory.getLogger(当前类名.class);

则代码的作用是一致的:就是使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在的类。

日志文件等级

img

通常使用到的为上图几种等级,他们分别代表的是:

trace:很低的日志级别,一般不会使用(当使用该日志级别时,会将其以上级别一同打印)

debug:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。(当使用该日志级别时,会将其以上级别一同打印)

info:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣或者重要的信息,这个可以用于生产程序运行中的一些重要信息,但是不能滥用瞎用,避免打印过多的日志。(当使用该日志级别时,会将其以上级别一同打印)

warn:表明会出现的潜在错误的情形,有些信息不是错误信息,但是也要给程序猿一些提示。(当使用该日志级别时,会将其以上级别一同打印)

error:指出虽然发生错误事件,但是仍然不影响系统的继续运行,打印错误和异常信息,如果不想输出特别多的日志信息,则可以考虑使用该级别。(当使用该日志级别时,会将其以上级别一同打印)

fatal:指出每个严重的错误事件,将会导致应用程序的退出,这个级别比较高。重大错误,这种错误可以直接停止程序。

@ConfigurationProperties(prefix = “dolphin”)

读取配置文件中 dolphin 下的内容
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值