0

コントローラーメソッドの 1 つで、Spring マネージド Bean が必要です。他の方法では必要ないので、自動配線する必要はないと思います。の使用は避けるべきだと既に読みApplicationContext.getBean()ましたが、代替手段はありますか?

使用getBean()が正しい決定である場合、作成された Bean には自動配線された属性があり、 で作成するときにそれらが設定されないようですgetBeans()

コード

@Controller
@RequestMapping("/controller*")
public class Controller {

    @RequestMapping
    public String get(Model model){
        Task task = ApplicationContextHolder.getBean("Task");
        task.getA();

        return "index";
    }
}

public class Task {
    @Autowired(required=true)
    private Service service;

    public List<Object> getA() {
        List<Object> list = service.findWhatever(); //service is null
        return list;
    }
}

すべての概念を正しく理解していないか、何かが欠けている可能性は十分にあります。TaskBeanを作成する最良の方法は何ですか?

4

1 に答える 1

3

インスタンスが Spring によって管理されているTask場合は、実際に注入する必要があります。やっている

Task task = ApplicationContextHolder.getBean("Task");

メソッド呼び出しのスタック全体を調べて、Bean を取得しようとします。それだけ@Autowiredで、頭が痛くなることはありません。

ご了承ください

@Autowired(required=true)
private Service service;

Application コンテキストに別のServiceBean が必要です。

于 2013-08-01T18:11:55.500 に答える