我是春天的新手。
回到不久前的日子。
我有一个带有静态方法的 Helper 类,可以帮助组装和构建对象。
但我意识到我不能@Autowired 静态变量。
我可以知道用静态方法替换助手类的弹簧是什么吗?或者我也应该把它们变成@Service 类?
我是春天的新手。
回到不久前的日子。
我有一个带有静态方法的 Helper 类,可以帮助组装和构建对象。
但我意识到我不能@Autowired 静态变量。
我可以知道用静态方法替换助手类的弹簧是什么吗?或者我也应该把它们变成@Service 类?
您可以使用 @Component 注释类。它是所有其他组件的基础。您的课程将类似于:
import org.springframework.stereotype.Component;
@Component("assembler") // giving name to component is not mandatory, could be @Component
public class Assembler {
public boolean assemble(Object obj) {
// your stuff here
}
}
这是您的汇编程序组件。您可以在其他类中使用它:
@Controller
public class MyController {
@Autowired
private Assembler assembler;
@RequestMappings(//mappings done here)
public String showMsg() {
// here you use assembler component
boolean response = assembler.assemble(new Object());
System.out.println(response);
}
}
这只是一个例子。我希望你明白我的意思。
好吧,有两种不同的方法可以帮助您解决这个问题。
问题:使用静态方法从 helperClass 调用服务函数或存储库函数会出现NullPointerException类型的错误:无法调用。
注意:注入方法是@Autowired。
@Autowired
private static WelcomeService welcome;
解决方案1:
使用构造函数注入器:
private static WelcomeService welcome;
@Autowired
private WelcomeUtility(WelcomeService welcomeService) {
WelcomeUtility.welcome = welcomeService;
}
解决方案2:
使用@PostConstruct 将值设置为静态字段
private static WelcomeService welcome;
@Autowired
private WelcomeService welcomeService;
@PostConstruct
public void init() {
this.welcome = welcomeService;
}
来源:解决方案的来源