3

我是春天的新手。

回到不久前的日子。

我有一个带有静态方法的 Helper 类,可以帮助组装和构建对象。

但我意识到我不能@Autowired 静态变量。

我可以知道用静态方法替换助手类的弹簧是什么吗?或者我也应该把它们变成@Service 类?

4

2 回答 2

7

您可以使用 @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);
    }
}

这只是一个例子。我希望你明白我的意思。

于 2013-08-22T10:14:35.110 回答
0

好吧,有两种不同的方法可以帮助您解决这个问题。

问题:使用静态方法从 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;
}

来源:解决方案的来源

于 2021-11-14T10:33:39.763 回答