Bean内有一个Controller方法

时间:2013-08-01 18:09:37

标签: java spring spring-mvc

我在我的一个控制器方法中需要一个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;
    }
}

完全有可能我不理解所有的概念,或者我错过了一些东西。创建Task bean的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

如果Task实例由Spring管理,那么你真的应该注入它。做

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

通过一堆方法调用来尝试获取bean。只要@Autowired,你就不会有任何麻烦。

请注意

@Autowired(required=true)
private Service service;

期望Application上下文中的另一个Service bean。