自动装配与在Spring中实例化

时间:2011-09-09 13:43:19

标签: java spring spring-mvc dependency-injection

我最近开始使用Spring。我正在制作spring mvc项目。所以我的问题是,如果我只使用Spring实现接口并使用特定实现自动装配它,或者只使用类实例,以防我只有一个接口的实现?

例如:

@Controller

public class MyController {
    @Autowired
    MyService myService;

    @RequestMap("/")
    public String mainPage() {
        ...
    }
}

@Controller

public class MyController {
    @RequestMap("/")
    public String mainPage() {
        MyService myService = new MyServiceImpl();
        ...
    }
}

如果只有一个MyService接口的实现?

2 个答案:

答案 0 :(得分:3)

在大多数情况下,你应该注射,因为:

  • 它简化了单元测试(你可以注入模拟或不同的实现)
  • Spring也可以将一些依赖项注入MyServiceImpl,因为它管理这个对象
  • 您没有将控制器与特定实现耦合

即使您的服务没有界面,因为您应考虑注射的第二个原因。

当你想要跳过Spring的唯一情况是当类没有任何依赖并且是无状态时。但很可能这样的类是一个根本不需要任何实例的实用程序,因为它只有static个成员。

答案 1 :(得分:1)

这取决于MyService是否是一个持有状态的bean。如果MyService不保持状态,那么您不需要创建新实例,并且可以让Spring注入具有上述优点的