手动实例化 Spring 个 bean

Manually instantiating Spring beans

我正在尝试重用我们基于 Spring-JDBC 的 DAO 类 和具有传统 Java(控制器)servlet(不是Spring 的 Dispatcher servlet)。因此,如下所示,我尝试使用 ClassPathXmlApplicationContext 手动启动 application-config.xml。但是,我收到下面进一步显示的错误。

private static final String CONFIG_PATH = "classpath*:application-config.xml";

private signupDao SignupDao;


ApplicationContext context = new ClassPathXmlApplicationContext(CONFIG_PATH);

signupDao = context.getBean(SignupDao.class);

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.abc.dao.SignupDao] is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:371) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:968)

早些时候,我没有将以下条目添加到application-config.xml,但即使添加了它,我仍然得到与上面相同的错误("No qualifying bean of type is defined")。

<bean id="signupDao" class="com.abc.dao.SignupDao"></bean>

有什么想法吗?

控制器 servlet 不是我自己的,我是从第三方获得的,我只是想扩展他们的处理程序,这是我尝试使用 Spring 自动装配的地方,JDBC等

编辑:

我唯一能够加载的 bean 是 context.getBean(MessageSource.class),我的 none 个 bean 可以加载。 getBeanDefinitionNames 在我之前尝试时返回空数组。您认为这是类路径问题吗?

要缩小问题范围,请确保您正在创建的 ApplicationContext 已成功创建。

这应该 return 来自给定应用程序上下文的所有 bean 名称。

 context.getBeanDefinitionNames();

更新

如果 ApplicationContext 没有列出您的 xml 配置中的任何 bean,这可能表明 ClassPathXmlApplicationContext.

无法访问资源文件

一种检查方法是执行如下操作:

ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream("application-config.xml")

如果资源可访问,这应该return 一个有效的非空流。

注意资源名称的格式。它不应包含任何前缀,例如 classpath:classpath*:

  1. CONFIG_PATH 中删除 classpath*: 部分,因为 ClassPathXmlApplicationContext 已经在 class 路径中查找文件(查看其名称) ;

  2. 确保您的 application-config.xml 文件位于 Web 应用程序 WEB-INF/classes 目录的根目录中,否则它不会在 class 路径中(假设该文件未打包在另一个 jar 中)。