即使通过@Bean创建Bean,也会出现NoSuchBeanDefinitionException

时间:2019-10-03 10:43:18

标签: java spring spring-mvc

之前也有人问过同样的问题。但是我无法解决这个问题。我面临以下异常:

class MyActivity : ExternalListener {
   val externalClass = ExternalClass(this)
   override fun printDetails() {
      println("printing details from: ".plus(this.javaClass.name))
   }
}

interface ExternalListener {
   fun externalMethod()
}

class ExternalClass(val listener: ExternalListener) {
   fun printResults() {
      listener.externalMethod()
   }
}

MeasurementNamedParameterJdbcTemplate是使用以下方法创建的:

NoSuchBeanDefinitionException: 
No qualifying bean of type 
[com.betterknow.connectonce.jdbc.MeasuringNamedParameterJdbcTemplate]

以上部分是在另一个项目(例如B)中,而我正在另一个项目(例如A)中使用maven使用该工件(B)。在A中,我的接线如下:

@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() throws Exception {           
    return new MeasuringNamedParameterJdbcTemplate(datasource());
}

奇怪的是,当我在服务器中部署代码时,它可以正常工作。但是当我从本地运行它时,它没有运行。

完整的堆栈跟踪:

@Autowired
private MeasuringNamedParameterJdbcTemplate jdbcTemplate;

2 个答案:

答案 0 :(得分:0)

您的bean类型为NamedParameterJdbcTemplate

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() throws Exception {           
        return new MeasuringNamedParameterJdbcTemplate(datasource());
    }

但是您尝试注入类型为MeasuringNamedParameterJdbcTemplate的bean。

您需要注入NamedParameterJdbcTemplate类型的bean:

    @Autowired // Field injection is not recommended
    private NamedParameterJdbcTemplate jdbcTemplate;

或在其定义中将bean类型更改为MeasuringNamedParameterJdbcTemplate

    @Bean
    public MeasuringNamedParameterJdbcTemplate namedParameterJdbcTemplate() throws Exception {           
        return new MeasuringNamedParameterJdbcTemplate(datasource());
    }
  

奇怪的是,当我在服务器中部署代码时,它可以正常工作。但是当我从本地运行它时,它没有运行。

这真的很奇怪,因为它不起作用,可能是您部署了另一个工件或进行了一些不正确的测试。

答案 1 :(得分:0)

更改

@Autowired
private MeasuringNamedParameterJdbcTemplate jdbcTemplate;

@Autowired
 private NamedParameterJdbcTemplate jdbcTemplate;