spring mvc,我的bean如何在控制器中自动装配?

我是 spring 和 spring mvc 的新手。我已经按照视频教程配置了数据源和 mvc。我添加了一个上下文文件offers-servlet.xmlWEB-INF那里我扫描我的controllers包在我的controller.java所在。我创建了另一个上下文service-context.xml,其中我是组件扫描service.java类。我service.java在我的controller.javawithsetService方法中创建了一个实例,我用@Autowired. 我的疑问是如何service.java在我的controller.java每个文件中自动装配,其中每个都在不同的包和具有不同 component-scan 的不同 context.xml 文件中。


眼眸繁星
浏览 155回答 5
5回答

梵蒂冈之花

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

函数式编程

如果 spring 容器知道 bean 位于不同的包中,则这些 bean 位于不同的包中这一事实并不重要。通过在两个包中启用组件扫描,您可以在应用程序的当前执行上下文中全局使用这两个包中的所有 bean。您可以将 spring IoC 视为全局映射,给定一个(先前注册的)键,它可以为您提供与该键相关的实例。

慕哥6287543

当您提到组件扫描包时,它表示spring-container 在这些包中找到带注释的类,然后bean(具有@Component 或相关注释的类的对象,如@Service、@Controller、@Repository)将是由 Spring 管理(从创建到销毁的整个生命周期)。因此,在您的应用程序中,无论何时您需要一个这样的 bean,而不是创建,它将由容器提供。另一方面,如果您没有指定“组件扫描”,您将必须确定您希望 Spring-container 管理其 bean 的类(使用 xml 或 javaConfig)。现在这部分是确定哪些 bean 将由 Spring-container 管理。接下来是在需要的地方连接这些 bean。为此,您在 setter 方法中提到了 @Autowired。当 Spring-container 遇到这个注解时,它会在容器中寻找那个 bean(在你的例子中是服务 bean)。由于该 bean 由容器管理(来自上一步)并且在需要时可用(在您的情况下在控制器类中),容器将提供(自动连接)服务 bean 到 setter 方法中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java