一、Spring的三种依赖注入
@Autowired默认按类型装配
AutoWired 自动装配
//自动装配,通过注解的形式引入需要的UserMapper对象 采用的是类型匹配的方式自动查找对象并赋值
//Qualifier:如果容器中有多个类型相同,但名称不同的Bean组件可用时,需要用Qualifier加以限定
@Autowired
@Qualifier("oracle")
private UserMapper userMapper;
@Resource(name="")
import javax.annotation.Resource;//位于javax.annotation.Resourc;
属于JSR-250中定义的;
JSR:java规范提案,是Java语言的一个标准;
先按照名称,在按照类型去匹配;
IDEA中直接在变量上使用 @Autowired会发现警告提示:Field injection is not recommended
。
原因是官方建议我们使用构造器注入方式,这种方式存在明显的弊端,比如:注入对象不能用final修饰、无法发现NullPointException的存在。
二、Lombok的@RequiredArgsConstructor进行改造
在Lombok中,生成构造方法的注解一共有三个,分别是
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsContructor
只用到@RequiredArgsConstructor
@RequiredArgsConstructor// 使用lombok的@RequiredArgsConstructor注解进行注入
public class roleController {
// 标记为final的,会自动进行注入
// 使用lombok的@NonNull注解标记的,会自动进行注入
@NonNull
private roleService roleService;
}
总结
@RequiredArgsConstructor是一个非常实用的注解,它可以帮助我们快速生成一个包含常量和使用final关键字修饰的变量的私有构造方法。这个注解的使用可以让我们避免使用属性注入的方式,而是通过构造器的方式来完成注入,从而提高代码的可读性和可维护性。
在使用@RequiredArgsConstructor注解时,我们需要注意以下几点:
1. 使用final关键字修饰的变量必须在声明时进行初始化,否则会编译错误。
2. 如果我们需要注入的对象不止一个,可以使用@NonNull注解来标注需要注入的对象,这样在注入时如果对象为null,就会抛出空指针异常。
使用@RequiredArgsConstructor注解可以让我们的代码更加简洁明了,同时也可以避免因为忘记初始化某些成员变量而导致的错误。因此,在实际开发中,我们应该尽可能地使用@RequiredArgsConstructor注解来完成注入,从而提高代码的可读性和可维护性。