Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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
使用JdbcTemplate字段扩展JavaSpring单例抽象类_Java_Spring_Oop_Abstract Class_Jdbctemplate - Fatal编程技术网

使用JdbcTemplate字段扩展JavaSpring单例抽象类

使用JdbcTemplate字段扩展JavaSpring单例抽象类,java,spring,oop,abstract-class,jdbctemplate,Java,Spring,Oop,Abstract Class,Jdbctemplate,我正在查看这个代码库,并试图了解它是如何工作的,或者它是否有代码气味 @Repository @Scope("singleton") public abstract class BaseDao { @Autowired protected JdbcTemplate jdbc; } 我的问题是当我在Dao1和Dao2中扩展BaseDAO抽象类时会发生什么,spring是否创建了两个jdbc模板,一个用于Dao1和Dao2,还是因为BaseDAO是spring singleton(我知

我正在查看这个代码库,并试图了解它是如何工作的,或者它是否有代码气味

@Repository
@Scope("singleton")
public abstract class BaseDao {

  @Autowired
  protected JdbcTemplate jdbc;

}
我的问题是当我在Dao1和Dao2中扩展BaseDAO抽象类时会发生什么,spring是否创建了两个jdbc模板,一个用于Dao1和Dao2,还是因为BaseDAO是spring singleton(我知道这与Java singleton或singleton设计模式不同),一旦任何子类创建了jdbc模板,它就会与所有子类使用/共享相同的jdbc模板

每次使用
@Autowired protected jdbctemplate jdbc
时,spring会创建一个新的jdbctemplate还是相同的jdbctemplate


编辑:更新了问题,以消除对会话的混淆提及。上面的评论是正确的答案,spring默认使用单例作用域,因此它将在两个类Dao1和Dao2中注入相同的JdbcTemplate。

没有SQL或JDBC会话。并且相同的JdbcTemplate将被注入两个bean中,因为Springbean在默认情况下是ar Singleton。@jbnize如果我对每个Dao对象使用不同的JdbcTemplate(假设有4个),应用程序是否会为每个Dao对象创建4个到sql server的连接?否。每个Dao对象将使用的连接将是绑定到当前事务的连接。我不确定我是否遵守,我的理解是每次使用JdbcTemplate对象执行sql查询时,它从DataSource接口的实现所维护的连接池中请求一个连接。确切地说,它通过调用来实现,调用将返回绑定到当前事务的连接。
@Repository
@Scope("singleton")
public class Dao1 extends BaseDao {

}

@Repository
@Scope("singleton")
public class Dao2 extends BaseDao {

}