使用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 {
}