2

Spring のドキュメントでは、JdbcTemplate を使用するための推奨される方法は、使用するnewすべてのクラスのテンプレートを作成することです...

public class JdbcCorporateEventDao implements CorporateEventDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

}

jdbctemplateコンテキストでシングルトンとして定義し、それを直接注入するよりも、このソリューションの利点は何ですか?Dao

 public class JdbcCorporateEventDao implements CorporateEventDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;

        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }

    }
4

2 に答える 2

4

JdbcTemplate のクラスレベルのドキュメントから:

 * Can be used within a service implementation via direct instantiation
 * with a DataSource reference, or get prepared in an application context
 * and given to services as bean reference.

どちらでもOKです。ここには大規模なアプリケーション (50 個の DAO、100 人の同時ユーザー) があり、アプリケーション全体に対して 1 つの jdbcTemplate オブジェクトがあり、Spring コンテキストで定義されています。これはうまくいきます。

于 2013-07-02T02:49:49.860 に答える
1

JdbcTemplateを直接注入することの欠点の 1 つは、 SQLExceptionTranslator.

あなたJdbcTemplateがシングルトンの場合SQLExceptionTranslator、任意のクラスで a を設定すると、そのテンプレートを使用するすべてのクラスに影響します。

例えば...

public class JbdcUserDAO implements UserDAO{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public JbdcUserDAO() {
        this.jdbcTemplate.setExceptionTranslator(new UserSQLExceptionTranslator());
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

}

public class JdbcCompanyDAO implements CompanyDAO{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public JdbcCompanyDAO() {

    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}

SQLException翻訳者が登録されていないように見えても、レイズ スルーJdbcCompanyDAOも実行されます。UserSQLExceptionTranslator

于 2014-03-19T16:08:43.997 に答える