在一个简单的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呢?
发布于 2019-05-10 15:43:14
是的,你可以只创建一个带有@Autowired注解的字段,然后spring为你注入它。确保您要使用此bean的类也是spring bean。
发布于 2019-05-12 20:14:21
在您的示例中,您将通过bean查找从ApplicationContext检索bean。
Coach theCoach=context.getBean("tennisCoach",Coach.class)在这种情况下,您知道所需的确切类名(这样您就是bean的作者),并且只需从上下文中获取它。
对于DispatcherServlet来说,这并不容易,因为它对您添加到上下文中的bean一无所知。
它唯一的选择是对上下文bean中定义的所有内容进行全面扫描,并检测它可以识别的任何内容(Controller、RestController、RequestMapping)。这类检测器的例子是AbstractDetectingUrlHandlerMapping及其实现。SpringMvc有这样的检测器的各种实现,如果需要,您可以实现自己的检测器。
https://stackoverflow.com/questions/56072627
复制相似问题