我是spring和spring mvc的新手。我已经按照视频教程配置了dataSource和mvc。我在offers-servlet.xml
所在的WEB-INF
包中扫描了controllers
所在的controller.java
包中添加了一个上下文文件service-context.xml
。我创建了另一个上下文service.java
,其中我是组件扫描service.java
类。我正在使用controller.java
注释的setService
方法在@Autowired
中创建service.java
的实例。我的疑问是controller.java
是如何在我的<?php echo $num == 2? 'sevice-middle' : '' ?>
中自动连接的,其中的每一个都位于不同的程序包中,并且具有不同的component-scan的不同context.xml文件。
答案 0 :(得分:1)
此处的链接说明了在注释情况下的组件扫描。在您的情况下,您已经配置了通过XML进行组件扫描。 Spring中的每个XML定义都有其对应的注释定义。尽管此链接示例了通过注释配置组件扫描的情况,但在您的情况下它也完全有效:
答案 1 :(得分:0)
如果bean在弹簧容器中是已知的,那么位于不同包装中的事实并不重要。通过在两个软件包中启用组件扫描,可以在应用程序的当前执行上下文中全局使两个软件包中的所有bean可用。
您可以将spring IoC视为一个全局映射,给定一个(先前注册的)密钥可以为您提供与该密钥相关的实例。
答案 2 :(得分:0)
当您提到组件扫描程序包时,它指示弹簧容器在那些提到的程序包中找到带注释的类,然后是Bean(具有@Component或相关注释(如@ Service,@ Controller,@ Repository)的类的对象)将由Spring管理(从创建到销毁的整个生命周期)。因此,在您的应用程序中,只要您需要一个这样的bean(而不是创建一个),它将由容器提供。另一方面,如果您未指定'component-scan',则必须标识要使用Spring容器管理其bean的类(使用xml或javaConfig)。现在,这部分内容是确定哪些容器将由Spring容器管理。
接下来是在需要的地方布线这些bean。为此,您在设置方法上提到了@Autowired。当Spring容器遇到此注释时,它将在容器中查找该bean(在您的情况下为service bean)。由于该bean由容器管理(来自上一步),并且在需要时可用(在您的情况下为控制器类),因此容器会将服务bean提供(自动装配)到setter方法中。