无人问津的自留地 >>> 无人问津的自留地 >>>

我始终相信,走过平湖烟雨,岁月山河,
那些经历劫数,尝遍百味的人,会更加生动而干净。

目录
JAVA | 常用的几种注入方式
/  

JAVA | 常用的几种注入方式

最后执行

@PostConstruct 该注解被用来修饰一个非静态的 void() 方法。被 @PostConstruct 修饰的方法会在服务器加载 Servlet 的时候运行,并且只会被服务器执行一次。@PostConstruct 在构造函数之后执行,init() 方法之前执行。@PostConstruct 注解的方法将会在依赖注入完成后被自动调用。

执行顺序如下:
Constructor >> @Autowired >> @PostConstruct

public class FileUtil {

    private static FileUtil fileUtil;

    @Autowired
    private AssetRepository assetRepository;

    @PostConstruct
    public void init() {
        fileUtil = this;
        fileUtil.assetRepository = this.assetRepository;
    }

}

构造器

Spring Team 推荐的写法

private final AssetRepository assetRepository;

public AssetResource(AssetRepository assetRepository) {
    this.assetRepository = assetRepository;
}

set 方式

autowired 注解安全。

private UserDao userDao;

@Autowired
public void setUserDao (UserDao userDao) {
    this.userDao = userDao;
}

最常用

@Autowired
private AssetRepository assetRepository;

@Resource

默认按照 byName 自动注入,由 J2EE 提供,需要导入 javax.annotation.Resource
它有两个重要的属性 name 和 type,而 Spring 将 @Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型
所以,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略
如果 name 和 type 属性都未指定,则默认 byName 注入,byName 未找到时,会继续采用 byType 注入

@Autowired

采用 byType 自动注入,由 Spring 提供,需要导入org.springframework.beans.factory.annotation.Autowired
默认情况要求对象必须存在,如果需要为 null,可以设置它的 required=true 
如果接口存在多个实现类,我们依然可以 byName 自动注入:通过与 @Qualifier 搭配使用
即先 byType,byType 匹配到多个时,再通过 byName

参考

@PostConstruct 注解
@Autowired 警告


标题:JAVA | 常用的几种注入方式
版权声明:本文为博主「fpdan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.fpdan.cn/articles/2020/05/26/1590490512000.html