gpt4 book ai didi

java - 线程中的异常 "main"org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named

转载 作者:行者123 更新时间:2023-12-02 01:30:36 29 4
gpt4 key购买 nike

我正在为 Sprinc IOC 容器使用以下配置。我的 app-config.xml 是:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">



<bean id="myDatasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/bus_db" />
<property name="username" value="sysadmin" />
<property name="password" value="adminadmin" />
</bean>

<!-- <context:property-placeholder location="src/main/java/com/bus/assets/dbinfo.properties" /> -->


</beans>

我的项目结构是:

enter image description here

我将用于注入(inject)的 Bean 类是:

    package com.bus.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import com.bus.model.Bus;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

@Component("busDAO")
public class BusDAO {

private JdbcTemplate myJdbcTemplate;

public List<Bus> getBusList(){
return myJdbcTemplate.query("select * from bus.bus",
new RowMapper<Bus>() {

@Override
public Bus mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Bus bus = new Bus();
bus.setBrandName(rs.getString("brand_name"));
bus.setBusId(rs.getInt("bus_id"));
bus.setBusNumber(rs.getString("bus_number"));
bus.setModelNumber("model_number");
//bus.setProdDate(prodDate);
return bus;
}

});
}

public JdbcTemplate getMyJdbcTemplate() {
return myJdbcTemplate;
}

@Autowired
public void setMyJdbcTemplate(DataSource ds) {
this.myJdbcTemplate = new JdbcTemplate(ds);
}

}

但是,当我尝试测试 Spring bean 注入(inject)时,我收到错误消息,无法找到名为“busDAO”的 bean。我还将空的现有 bean 数组输出到我的 Spring Tool Suite 控制台中。

public class TestConnection {

public static void main(String[] args) {
// TODO Auto-generated method stub


ApplicationContext appcon = new FileSystemXmlApplicationContext("/src/main/webapp/WEB-INF/config/app-config.xml");
System.out.println("Bean names: " + Arrays.toString(appcon.getBeanNamesForType(BusDAO.class)));


BusDAO myBusDAO = appcon.getBean("busDAO", BusDAO.class);

List<Bus> myBusList = myBusDAO.getBusList();

for(Bus b: myBusList) {
System.out.println(b.toString());
}

}

}

为了让我的 Spring Bean 上下文找到丢失的 bean,我可以做得更好吗?

最佳答案

  • 这里的问题是 @Component 和 @Bean 之间似乎存在混淆。
  • 您需要做的是创建另一个类,并使用@Configuration进行注释。
  • 在这个类中,您应该创建一个用 @Bean 注解的函数,并且该函数应该返回您启动的 Dao。
  • 如果需要,我可能会添加它的代码。

    @配置公共(public)类 DaoConfiguration{ @ bean 公共(public) BusDAO dao { 返回新的 BusDAO(); }}

你可以使用这个bean@Autowired BusDAO 总线Dao

对于格式错误的代码,我深感抱歉:)

关于java - 线程中的异常 "main"org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107933/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com