mrb*_*lah 4 java spring spring-mvc
使用Spring和Spring的MVC时,应该在哪里进行依赖注入(DI)?
例如,如果您有控制器,并且控制器中有许多操作.
你会做的:
@RequestMapping("/blah")
public String SomeAction()
{
ApplicationContext ctx = new AnnotationConfigApplicationContext();
MyService myService = ctx.getBean("myService");
// do something here
return "someView";
}
Run Code Online (Sandbox Code Playgroud)
这是最好的做法吗?或者他们是更好的方式?
Pas*_*ent 10
依赖注入的整个想法是不让你的类知道或关心他们如何获得他们依赖的对象.通过注入,这些依赖关系应该"出现"而没有任何请求(因此控制反转).使用时ApplicationContext#getBean(String)
,您仍然要求依赖(服务定位器),这不是控制反转(即使这允许您轻松更改实现).
因此,相反,您应该MyController
使用Spring托管bean并MyService
使用基于setter或构造函数的注入进行注入.
public class MyController {
private MyService myService;
public MyController(MyService aService) { // constructor based injection
this.myService = aService;
}
public void setMyService(MySerice aService) { // setter based injection
this.myService = aService;
}
@Autowired
public void setMyService(MyService aService) { // autowired by Spring
this.myService = aService;
}
@RequestMapping("/blah")
public String someAction()
{
// do something here
myService.foo();
return "someView";
}
}
Run Code Online (Sandbox Code Playgroud)
并配置Spring将事物连接在一起.
归档时间: |
|
查看次数: |
1616 次 |
最近记录: |