我正在查看此代码库,并且试图了解它的工作方式或是否有代码气味。
@Repository
@Scope("singleton")
public abstract class BaseDao {
@Autowired
protected JdbcTemplate jdbc;
}
@Repository
@Scope("singleton")
public class Dao1 extends BaseDao {
}
@Repository
@Scope("singleton")
public class Dao2 extends BaseDao {
}
[我的问题是,当我在Dao1和Dao2中扩展BaseDAO抽象类,spring是否创建2个jdbc模板时会发生什么,一个同时用于Dao1和Dao2,或者因为BaseDAO是spring-singleton(我知道这与Java单例不同,所以会发生什么?或单例设计模式),一旦任何子级创建了jdbc模板,它将与所有子类使用/共享相同的jdbc模板。
每当您使用@Autowired protected JdbcTemplate jdbc
或相同的代码时,spring都会创建一个新的jdbctemplate吗?
编辑:更新了问题,以消除对会话的混淆提及。
@ JB Nizet的评论是正确的答案,默认情况下,spring使用单例作用域,因此它将在Dao1和Dao2两个类中注入相同的JdbcTemplate。