繁体   English   中英

Spring MVC,我的bean如何在控制器中自动接线?

[英]spring mvc, how do my beans get autowired in controller?

我是Spring和Spring MVC的新手。 我已经按照视频教程配置了dataSource和mvc。 我添加了一个上下文文件offers-servlet.xmlWEB-INF在那里我扫描我的controllers封装在我的controller.java所在。 我创建了另一个上下文service-context.xml ,其中我是组件扫描service.java类。 我正在用setService方法在我的controller.java创建service.java的实例, setService方法用@Autowired注释。 我的疑问是, service.java如何自动连接到我的controller.java ,其中的每一个都位于不同的包中,并且具有不同的component-scan的不同context.xml文件。

这里的链接说明了注释情况下的组件扫描。 在您的情况下,您已经配置了通过XML进行组件扫描。 Spring中的每个XML定义都有其对应的注释定义。 尽管此链接示例了通过注释配置组件扫描的情况,但在您的情况下它也完全有效:

如何了解Spring @ComponentScan

如果弹簧容器知道这些豆位于不同包装中的事实并不重要。 通过在两个软件包中启用组件扫描,可以在应用程序的当前执行上下文中全局使两个软件包中的所有bean可用。

您可以将spring IoC视为一个全局映射,给定一个(先前注册的)密钥,它可以为您提供与该密钥相关的实例。

当您提到组件扫描程序包时,它指示弹簧容器在那些提到的程序包中找到带注释的类,然后将Bean(具有@Component或相关注释(如@ Service,@ Controller,@ Repository)的类的对象)由Spring管理(从创建到破坏的整个生命周期)。 因此,在您的应用程序中,只要您需要一个这样的bean(而不是创建一个),它将由容器提供。 另一方面,如果您未指定'component-scan',则必须标识要使用Spring容器管理其bean的类(使用xml或javaConfig)。 现在,这一部分正在确定哪些容器将由Spring容器管理。

接下来是在需要的地方布线这些bean。 为此,您在设置方法上提到了@Autowired。 当Spring容器遇到此注释时,它将在容器中查找该bean(在您的情况下为service bean)。 由于该bean由容器管理(来自上一步),并且在需要时可用(在您的情况下为控制器类),因此容器会将服务bean提供(自动装配)到setter方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM