Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “线程中的异常”;“主要”;org.springframework.beans.factory.nosuchbeansdefinitionexception:没有名为_Java_Spring_Spring Mvc_Inversion Of Control - Fatal编程技术网

Java “线程中的异常”;“主要”;org.springframework.beans.factory.nosuchbeansdefinitionexception:没有名为

Java “线程中的异常”;“主要”;org.springframework.beans.factory.nosuchbeansdefinitionexception:没有名为,java,spring,spring-mvc,inversion-of-control,Java,Spring,Spring Mvc,Inversion Of Control,我正在为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.springframew

我正在为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>

我的项目结构是:

我将用于注入的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);
    }

}
包com.bus.dao;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.List;
导入javax.sql.DataSource;
导入com.bus.model.bus;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.jdbc.core.jdbc模板;
导入org.springframework.jdbc.core.RowMapper;
导入org.springframework.stereotype.Component;
@组件(“busDAO”)
公共类BusDAO{
私有JdbcTemplate myJdbcTemplate;
公共列表getBusList(){
返回myJdbcTemplate.query(“select*from bus.bus”,
新的行映射器(){
@凌驾
公共总线映射行(ResultSet rs,int rowNum)引发SQLException{
//TODO自动生成的方法存根
总线=新总线();
bus.setBrandName(rs.getString(“品牌名称”);
bus.setBusId(rs.getInt(“bus_id”);
bus.setBusNumber(rs.getString(“总线号”);
总线设置型号(“型号”);
//总线设置prodDate(prodDate);
回程巴士;
}
});
}
公共JdbcTemplate getMyJdbcTemplate(){
返回myjdbc模板;
}
@自动连线
公共void setMyJdbcTemplate(数据源ds){
this.myJdbcTemplate=新的JdbcTemplate(ds);
}
}
然而,当我尝试测试SpringBean注入时,我得到了一个错误,即无法找到名为“busDAO”的bean。我还向我的Spring工具套件控制台输出了一组空的现有bean

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());
    }

}
公共类TestConnection{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ApplicationContext appcon=新文件系统XMLApplicationContext(“/src/main/webapp/WEB-INF/config/app config.xml”);
System.out.println(“Bean名称:+Arrays.toString(appcon.getBeanNamesForType(BusDAO.class));
BusDAO myBusDAO=appcon.getBean(“BusDAO”,BusDAO.class);
List myBusList=myBusDAO.getBusList();
用于(总线b:myBusList){
System.out.println(b.toString());
}
}
}

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

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

    @配置 公共类配置{ @豆子 公共巴士道{ 返回新的BusDAO(); } }

您可以使用 @自动连线总线总线

很抱歉代码格式不正确:)

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

    @配置 公共类配置{ @豆子 公共巴士道{ 返回新的BusDAO(); } }

您可以使用 @自动连线总线总线


很抱歉代码格式不正确:)

您需要将
上下文:组件扫描
元素添加到
app config.xml
或手动实例化bean:

<bean id="busDAO" class="com.bus.dao.BusDAO">
  <!-- specifics omitted as i am not that good with xml config -->
</bean>

您需要将
context:component scan
元素添加到
app config.xml
或手动实例化bean:

<bean id="busDAO" class="com.bus.dao.BusDAO">
  <!-- specifics omitted as i am not that good with xml config -->
</bean>

我所做的:向busDAO添加了一个名为private DataSource DataSource的属性

@Component("busDAO")
public class BusDAO {

    private JdbcTemplate myJdbcTemplate;
    private DataSource dataSource;
    .....
public void setDataSource(DataSource dataSource) {
          this.dataSource = dataSource;
          this.myJdbcTemplate = new JdbcTemplate(dataSource);
       }

然后按照xml配置配置bean:

我所做的:向busDAO添加了一个名为private-DataSource-DataSource的属性

@Component("busDAO")
public class BusDAO {

    private JdbcTemplate myJdbcTemplate;
    private DataSource dataSource;
    .....
public void setDataSource(DataSource dataSource) {
          this.dataSource = dataSource;
          this.myJdbcTemplate = new JdbcTemplate(dataSource);
       }

然后按照xml配置配置bean:

很可能不会发现该类,由于没有进行组件扫描,我们必须查看他的整个代码库,看看他是否在任何地方声明了componentscan注释,以确认我猜…很可能不会发现该类,由于没有进行组件扫描,我们必须查看他的整个代码库,看看他是否在任何地方声明了componentscan注释,以确认我猜…我试图在app-config.xml中添加一个新bean,但是,即使我在setter方法中声明了autowire,该bean也被初始化为null,以便注入到datasource.哪个bean被初始化为null?datasource、jdbcTemplate还是busDAO?jdbcTemplate被初始化为null,因此busDAOdataSource不是null由于缺少很多信息,我只能在这里假设,但是尝试以下操作很可能很有用:*不要自己创建新的jdbcTemplate,直接注射。工作的JdbcTemplate需要显式调用
afterPropertiesSet
*尝试通过构造函数注入
busDao
如果有
数据源
要注入,则该
总线将不会为
-但是,由于缺少
组件,可能无法发现setter上的
@Autowired
扫描
。请记住,您可以在xml中声明一个
bean ref
,以将现有bean引用传递给我尝试在app conf中添加新bean的方法