【发布时间】:2019-05-10 07:20:06
【问题描述】:
在一个简单的 spring 应用程序中,您使用 @Component 注释在 spring IoC 容器中注册您的 bean,然后检索 bean,您首先读取 spring 配置文件,然后使用以下方法从容器中检索 bean:
ClassPathXMLApplicationContext context = new ClassPathXMLApplicationContext("spring config file")
Coach theCoach=context.getBean("beanId","classname")
现在,您可以调用theCoach 上的方法了。
我们如何从容器中检索 bean,因为我们不使用
context.getBean();
DispatcherServlet 处理这个吗?
编辑后-
/*********************Spring应用程序**************************** ********/ applicationContext.xml
<beans _______>
<context:component-scan base-package="packageName"/>
</beans>
Coach.java
public interface Coach{
public String getDailyWorkOut();
}
TennisCoach.java
@Component
public class TennisCoach implements Coach{
public String getDailyWorkOut(){
return "practise back hand volley";
}
ApplicationDemo.java
public class ApplicationDemo{
public static void main(String[] args){
ClassPathXMLApplicationContext context = new ClassPathXMLApplicationContext("applicationContext.xml");
Coach theCoach=context.getBean("tennisCoach",Coach.class)
theCoach.getDailyWorkOut();
}
}
/*********************Spring应用程序**************************** ********/
现在是 Spring MVC-
/*****************Spring-MVC Application**************************/
web.xml
<web-app>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>contextConfigurationLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
applicationContext.xml
<beans _______>
<context:component-scan base-package="packageName"/>
</beans>
Coach.java
public interface Coach{
public String getDailyWorkOut();
}
TennisCoach.java
@Component
public class TennisCoach implements Coach{
@RequestMapping("/")
public String getDailyWorkOut(){
return "practise back hand volley";
}
/*********************Spring-MVC Application*********************/
我想知道的是-
在上面给定的 spring 应用程序中,我使用 context.getBean() 从容器中检索 bean,如何在 Spring-MVC 应用程序中检索 Coach bean?
【问题讨论】:
-
我不确定我是否清楚地理解了您的问题。你能改写一下吗?您想知道框架如何在需要时检索 bean,例如在 MVC 应用程序中?你能举个例子来说明你的观点吗?
-
也许您缺少的概念是注入:使用 \@Autowired 或 \@Inject,您是在告诉框架将从上下文中检索到的与声明类型匹配的现有对象放在那里。
-
@lealcelderio 是的,是的,这就是我想知道的。 Spring-MVC 框架如何在需要时检索 bean。只是想知道在 Spring-MVC 中实现 context.getBean() 的位置,因为我们没有明确地编写它?
-
@spi 提到了您回答的关键方面。更详细的信息可能是 MVC 框架的内部实现。您可以阅读 spi 提到的内容,如果您有更具体的问题,请返回此处并 edit 发帖。
-
@lealceldeiro 感谢您的建议,我对 \@Autowired 如何工作或它如何注入依赖项有所了解。我已经编辑了我的问题并包含了一个示例。我希望我的查询现在很清楚。
标签: java spring spring-mvc