我对control(IoC)的反转如何在Spring。
control(IoC)
Spring
假设我有一个称为服务的类UserServiceImpl,它实现了UserService接口。
UserServiceImpl
UserService
怎么会这样@Autowired?
@Autowired
而在我Controllers,我怎么会instantiate在instance这个服务的?
Controllers
instantiate
instance
我会做以下事情吗?
UserService userService = new UserServiceImpl();
首先,也是最重要的一点-所有Spring Bean都受到管理-它们“实时”存在于称为“应用程序上下文”的容器中。
其次,每个应用程序都有一个指向该上下文的入口。Web应用程序具有Servlet,JSF使用el-resolver等。此外,在某个地方可以引导应用程序上下文,并且所有bean都可以自动连接。在Web应用程序中,它可以是启动侦听器。
通过将一个bean的实例放置到另一个bean的实例的所需字段中来进行自动装配。这两个类都应为bean,即应将它们定义为存在于应用程序上下文中。
应用程序上下文中的“生存”是什么?这意味着上下文会实例化对象,而不是你。即-你永远不会new UserServiceImpl()-容器找到每个注入点并在那里设置实例。
new UserServiceImpl()
在控制器中,你只有以下内容:
@Controller // Defines that this class is a spring bean @RequestMapping("/users") public class SomeController { // Tells the application context to inject an instance of UserService here @Autowired private UserService userService; @RequestMapping("/login") public void login(@RequestParam("username") String username, @RequestParam("password") String password) { // The UserServiceImpl is already injected and you can use it userService.login(username, password); } }
一些注意事项: