多个 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 也足够了。
我的应用程序是 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 也足够了。