Spring 引导中的构造函数是否必须使用 @Autowired 注释
Is @Autowired annotation mandatory on constructor in Spring boot
如果我使用构造函数 DI,是否必须输入 @Autowired
?
Is @Autowired annotation mandatory for a constructor?
没有
在 Spring 4.3 之后 如果你的 class 只有一个构造函数那么就没有必要把 @Autowired
.
之前 Spring 4.3:
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
之后:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
额外:使用 Lombok,在 Spring 4.3
之后
使用 Lombok 你可以使用 @RequiredArgsConstructor
让代码更简洁:
@Service
@RequiredArgsConstructor
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
}
如果我使用构造函数 DI,是否必须输入 @Autowired
?
Is @Autowired annotation mandatory for a constructor?
没有
在 Spring 4.3 之后 如果你的 class 只有一个构造函数那么就没有必要把 @Autowired
.
之前 Spring 4.3:
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
之后:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
额外:使用 Lombok,在 Spring 4.3
之后使用 Lombok 你可以使用 @RequiredArgsConstructor
让代码更简洁:
@Service
@RequiredArgsConstructor
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
}