0

私はSpringとJavaの学習に取り組んでいます。Spring 3 アプリを作成し、接続プールを Bean として作成しようとしました。

 @Bean
 public ComboPooledDataSource comboPooledDataSource() {

    ComboPooledDataSource pool = new ComboPooledDataSource();
    // configure here
 }

次に、別のクラスで:

public class DatabaseQuery {

@Inject private ComboPooledDataSource comboPooledDataSource;

private Connection getConnection() {
    try {
        return comboPooledDataSource.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

いくつかのデバッグ ステートメントから、接続プールが正常に作成されていることがわかりますが、comboPooledDataSource を使用すると、NullPointerException が発生します。Bean を取得して使用するにはどうすればよいですか? 私はこれを間違っていますか?

4

2 に答える 2

0

1 つの解決策は、Spring コンテキストに明示的にアクセスすることです。

AppConfig で:

@Bean
public ComboPooledDataSource comboPooledDataSource() {

次に、アプリケーションで

private Connection getConnection() {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationContextConfiguration.class);
    ComboPooledDataSource comboPooledDataSource = ctx.getBean(ComboPooledDataSource.class);
    try {
        return comboPooledDataSource.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

javax.inject @Named アノテーションを使用すると、名前で取得することもできます。

ComboPooledDataSource comboPooledDataSource = ctx.getBean("myDataSource");

次に、AppConfig で:

@Bean
@Named("myDataSource")
public ComboPooledDataSource comboPooledDataSource() {
于 2013-08-21T15:07:38.450 に答える