0

我正在同时学习 Spring 和 Java。我正在处理我的应用程序上下文。这是我的一颗豆子:

package com.example.app.context;

@Configuration
public class ApplicationContextConfiguration {

    @Bean
    public ComboPooledDataSource comboPooledDataSource() {
        // ... setup pool here
        return pool;
    }
}

现在我想使用这个bean:

package com.example.db.queries;

import javax.inject.Inject;

public class DatabaseQueries {

    @Inject private ComboPooledDataSource comboPooledDataSource;

    public static List<Records> getData() {
        Connection connection = comboPooledDataSource.getConnection();
        // ... create sql query and execute 
} 

但我在编译时收到此错误:

[ERROR] non-static variable comboPooledDataSource cannot be referenced from a static context

我如何访问这个bean?

在此先感谢,请记住,我正在学习!

4

2 回答 2

3

你的方法getData()是静态的。在使用 Spring 或通常使用 Dependency Injection 时,您使用的静态方法比以前少得多。使其成为非静态的。当你需要使用你的 DatabaseQueries 时,你会再次注入它。

@Component
public class DatabaseQueries {

@Inject 
private ComboPooledDataSource comboPooledDataSource;

public List<Records> getData() {
    Connection connection = comboPooledDataSource.getConnection();
    // ... create sql query and execute 
}

以及用法:

@Component
public class AnotherBean{

    @Inject 
    private DatabaseQueries queries;

    public void doSomething {
        List<Records> data = queries.getData();
    }
}
于 2013-08-20T20:19:11.543 回答
1

这更像是一个 Java 错误而不是 Spring 错误。

您需要将方法 getData() 声明为不是静态的。

于 2013-08-20T20:13:43.613 回答