赞
踩
@Autowired自动装配通过类型、名字
直接在属性上使用即可,也可以在set方式上 使用
使用Autowired我们可以不用编写set了,前提是你这个自动装配的属性在ioc(spring)容器中是存在的,且符合名字byName
科普:
@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; }}
如果@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自动装配通过名字、类型
<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的区别:
放在类上,说明这个类被spring管理了,就是bean
@Component组件:等价于<bean id="user" class="com.xie.pojo.User"/>
@Componentpublic class User { public String name = "秦馨";}
注入
@Componentpublic class User { public String name ; //相当于<property name="name" value="can"/> @Value("can") public void setName(String name) { this.name = name; }}
lombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。
使用lombok注解,目的和作用就在于不用再去写经常反复去写的(如Getter,Setter,Constructor等)一些代码了。
首先,用到的几个注解:
字典翻译注解 @Dict
: 用于列表字段字典翻译,将数据库某一列的值按照字典配置翻译成对应的文字描述。(比如字段status存的值是1,会自动生成一个翻译字段 status_dictText 值是‘已付款’)
@Dict(dicCode = “id”,dictTable = “sys_user”,dicText = “realname”)
private String managerId;
dicCode
为关联表的组件
dictTable
为关联表
dicText
为需要显示的内容
@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:注解的保留位置
RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
@Document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解
MyBatisPlus有个不起眼的字段@TableField,一般不是必须的。但是他有一个属性exist,是表示这个字段在数据库中是否存在(是否实体字段),与JPA的@Transient是类似的。
于是乎,加个@TableField(exist = false)搞定
@TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
@TableField(exist = true):表示该属性为数据库表字段。
该字段共有三个属性,分别是 fluent,chain,prefix
不写默认为false,当该值为 true 时,对应字段的 getter 方法前面就没有 get,setter 方法就不会有 set。
不写默认为false,当该值为 true 时,对应字段的 setter 方法调用后,会返回当前对象。
该属性是一个字符串数组,当该数组有值时,表示忽略字段中对应的前缀,生成对应的 getter 和 setter 方法。
比如现在有 xxName 字段和 yyAge 字段,xx 和 yy 分别是 name 字段和 age 字段的前缀。
那么,我们在生成的 getter 和 setter 方法如下,它也是带有 xx 和 yy 前缀的。
如果,我们把它的前缀加到 @Accessors 的属性值中,则可以像没有前缀那样,去调用字段的 getter和 setter 方法。
注解的作用就是自动的给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。
如果不设置类型值,默认则使用IdType.ASSIGN_ID策略(自3.3.0起)。该策略会使用雪花算法自动生成主键ID,主键类型为长整型或字符串(分别对应的MySQL的表字段为BIGINT和VARCHAR)
- 雪花算法(雪花)是微博开源的分布式ID生成算法其核心思想就是:使用一个64位的长型的数字作为全局唯一ID。在分布式系统中的应用十分广泛,且ID引入了时间戳,基本上保持自增的。
如果使用IdType.ASSIGN_UUID策略,并重新自动生成排除中划线的UUID作为主键。主键类型为String,对应MySQL的表分段为VARCHAR(32)
提示:该策略使用接口IdentifierGenerator的方法nextUUID
对于像MySQL这样的支持主键自动递增的数据库,我们可以使用IdType.AUTO策略。
(1)针对有序列的数据库:Oracle,SQLServer等,当需要建立一个自增序列时,需要用到序列
@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注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。
该注解的作用:
该注解的作用主要是操作在idea中的控制台中打印的日志信息。该注解相当于代替了以下的代码:private final Logger logger = LoggerFactory.getLogger(当前类名.class);
具体如下:
而private final Logger logger = LoggerFactory.getLogger(当前类名.class);该行代码的作用是什么?
@Slf4j的注解相当于private final Logger logger = LoggerFactory.getLogger(当前类名.class);
则代码的作用是一致的:就是使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在的类。
日志文件等级
通常使用到的为上图几种等级,他们分别代表的是:
trace:很低的日志级别,一般不会使用(当使用该日志级别时,会将其以上级别一同打印)
debug:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。(当使用该日志级别时,会将其以上级别一同打印)
info:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣或者重要的信息,这个可以用于生产程序运行中的一些重要信息,但是不能滥用瞎用,避免打印过多的日志。(当使用该日志级别时,会将其以上级别一同打印)
warn:表明会出现的潜在错误的情形,有些信息不是错误信息,但是也要给程序猿一些提示。(当使用该日志级别时,会将其以上级别一同打印)
error:指出虽然发生错误事件,但是仍然不影响系统的继续运行,打印错误和异常信息,如果不想输出特别多的日志信息,则可以考虑使用该级别。(当使用该日志级别时,会将其以上级别一同打印)
fatal:指出每个严重的错误事件,将会导致应用程序的退出,这个级别比较高。重大错误,这种错误可以直接停止程序。
读取配置文件中 dolphin 下的内容
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。