多个 SimpleJDBCCall bean 在 Java 中导致 Sonar 问题

Multiple SimpleJDBCCall beans causing Sonar issue in Java

我的应用程序是 springboot,我有 DatabaseConfig,其中多个 SimpleJDBCCall bean 配置为执行存储过程,并且有 DAO,其中使用构造函数注入 bean。这很好用,但是这在声纳上失败了,因为我有超过 7 个 bean。我们无法调整 Sonar 设置,因为许多团队都在使用它。所以请在这里建议, 下面是我的 DatabaseConfig 的样子

@Configuration
public class DatabaseConfig {

@Autowired
public JDBCTemplate jdbcT;

@Bean(spOne)
public SimpleJDBCCall spOne(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}

@Bean(spTwo)
public SimpleJDBCCall spTwo(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}

@Bean(spTen)
public SimpleJDBCCall spTen(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}}

下面是我的 DAO class 的样子

@Repository
public class Dao{
private JDBCTemplate jdbcT;
private SimpleJDBCCall spOne; private SimpleJDBCCall spTwo; private SimpleJDBCCall spTen;

  public Dao(JDBCTemplate jdbcT, SimpleJDBCCall spOne; SimpleJDBCCall spTwo; SimpleJDBCCall spTen){
         this.jdbcT = jdbcT;
         this.spOne = spOne;
         this.spOne = spTwo; // More settings of storedProc beans.
         this.spOne = spTen;
}}

您可以将 Map 定义为构造函数参数,如下所示:

public Dao(JDBCTemplate template, Map<String, SimpleJDBCCall> jdbcCalls){
    
}

Spring 然后会将所有类型为 SimpleJDBCCall 的 bean 实例添加到映射中。映射的关键是 bean 名称(在您的例子中,例如“spOne”、“spTwo”等),值是 bean 的实例。如果你仍然可以用这个来做你的用例,它可能是最简单的解决方案。

如果您不访问代码中的特定 bean,但例如只需遍历所有模板以执行调用,那么用 List 代替 map 也足够了。