java – 自动装配在Spring中如何工作?

我对如何inversion of control(IoC)在春天工作有点困惑。

说我有一个服务类UserServiceImpl实现UserService接口。

这将是什么@Autowired?

在我的控制器操作中,我如何实例化此服务的实例?

我只要做以下事情?

UserService userService = new UserServiceImpl();
首先,最重要的是 – 所有Spring bean都是被管理的 – 它们“活”在一个称为“应用程序上下文”的容器中。

第二,每个应用程序都有一个到该上下文的入口点。 Web应用程序有一个Servlet,JSF使用一个el-resolver等。此外,还有一个地方,应用程序上下文被引导和所有beans – autowired。在Web应用程序中,这可以是启动侦听器。

通过将一个bean的实例放入另一个bean的实例中的期望字段中来进行自动装配。两个类都应该是bean,即它们应该被定义为存在于应用程序上下文中。

在应用程序上下文中的“生存”是什么?这意味着上下文实例化对象,而不是你。也就是说 – 你永远不会创建新的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);

    }
}

几个注意事项:

>在你的applicationContext.xml中,你应该启用以便对类进行@Controller,@Service等注释的扫描。
> Spring-MVC应用程序的入口点是DispatcherServlet,但它是隐藏的,因此应用程序上下文的直接交互和引导发生在场景后面。
> UserServiceImpl也应该定义为bean – 使用或使用@Service注释。因为它将是UserService的唯一实现者,它将被注入。
>除了@Autowired注释,Spring可以使用XML可配置的自动装配。在这种情况下,所有具有与现有bean匹配的名称或类型的字段都会自动获取bean。事实上,这是自动装配的最初想法 – 使字段注入依赖性没有任何配置。也可以使用其他注释,如@Inject,@Resource。

http://stackoverflow.com/questions/3153546/how-does-autowiring-work-in-spring

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 自动装配在Spring中如何工作?