手动实例化 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*:
从 CONFIG_PATH
中删除 classpath*:
部分,因为 ClassPathXmlApplicationContext
已经在 class 路径中查找文件(查看其名称) ;
确保您的 application-config.xml
文件位于 Web 应用程序 WEB-INF/classes
目录的根目录中,否则它不会在 class 路径中(假设该文件未打包在另一个 jar 中)。
我正在尝试重用我们基于 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*:
从
CONFIG_PATH
中删除classpath*:
部分,因为ClassPathXmlApplicationContext
已经在 class 路径中查找文件(查看其名称) ;确保您的
application-config.xml
文件位于 Web 应用程序WEB-INF/classes
目录的根目录中,否则它不会在 class 路径中(假设该文件未打包在另一个 jar 中)。