我在我的一个控制器方法中需要一个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的最佳方法是什么?
答案 0 :(得分:3)
如果Task
实例由Spring管理,那么你真的应该注入它。做
Task task = ApplicationContextHolder.getBean("Task");
通过一堆方法调用来尝试获取bean。只要@Autowired
,你就不会有任何麻烦。
请注意
@Autowired(required=true)
private Service service;
期望Application上下文中的另一个Service
bean。