首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring-MVC中检索bean?

如何在Spring-MVC中检索bean?
EN

Stack Overflow用户
提问于 2019-05-10 15:20:07
回答 2查看 102关注 0票数 2

在一个简单的spring应用程序中,通过使用@Component注释在spring IoC容器中注册bean,然后要检索bean,首先读取spring配置文件,然后使用以下命令从容器中检索bean:

代码语言:javascript
复制
ClassPathXMLApplicationContext context = new ClassPathXMLApplicationContext("spring config file")


Coach theCoach=context.getBean("beanId","classname") 

现在,您可以在theCoach上调用这些方法了。

我们如何从容器检索bean,因为我们没有使用

代码语言:javascript
复制
context.getBean();

DispatcherServlet正在处理这个问题吗?

编辑后-

/*********************Spring应用程序*/ applicationContext.xml

代码语言:javascript
复制
<beans _______>

<context:component-scan base-package="packageName"/>

</beans>

Coach.java

代码语言:javascript
复制
public interface Coach{

public String getDailyWorkOut();

}

TennisCoach.java

代码语言:javascript
复制
@Component                                                                                                   

public class TennisCoach implements Coach{

public String getDailyWorkOut(){

return "practise back hand volley"; 

}

ApplicationDemo.java

代码语言:javascript
复制
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- -

代码语言:javascript
复制
/*****************Spring-MVC Application**************************/

web.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
<beans _______>

<context:component-scan base-package="packageName"/>

</beans>

Coach.java

代码语言:javascript
复制
public interface Coach{

public String getDailyWorkOut();

}

TennisCoach.java

代码语言:javascript
复制
@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呢?

EN

回答 2

Stack Overflow用户

发布于 2019-05-10 15:43:14

是的,你可以只创建一个带有@Autowired注解的字段,然后spring为你注入它。确保您要使用此bean的类也是spring bean。

票数 0
EN

Stack Overflow用户

发布于 2019-05-12 20:14:21

在您的示例中,您将通过bean查找ApplicationContext检索bean。

代码语言:javascript
复制
Coach theCoach=context.getBean("tennisCoach",Coach.class)

在这种情况下,您知道所需的确切类名(这样您就是bean的作者),并且只需从上下文中获取它。

对于DispatcherServlet来说,这并不容易,因为它对您添加到上下文中的bean一无所知。

它唯一的选择是对上下文bean中定义的所有内容进行全面扫描,并检测它可以识别的任何内容(ControllerRestControllerRequestMapping)。这类检测器的例子是AbstractDetectingUrlHandlerMapping及其实现。SpringMvc有这样的检测器的各种实现,如果需要,您可以实现自己的检测器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56072627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档