2013-08-20 2 views
0

Я изучаю Spring и Java одновременно. Я работаю над своим контекстом приложения. Вот один из моих бобов:Обучение Spring/Java: как внедрить Spring Bean

package com.example.app.context; 

@Configuration 
public class ApplicationContextConfiguration { 

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

Теперь я хочу использовать этот компонент:

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 

Как получить доступ к этим фасоль?

Заранее благодарим за внимание, и помните, что я учусь!

+0

Это не имеет ничего общего с весной или инъекции. –

+0

Ошибка сообщает все. Поле - это поле экземпляра. Ваш метод статичен. –

+0

Хорошо спасибо Брайан, не могли бы вы помочь мне выяснить, что это такое? –

ответ

3

Ваш метод getData() ist статический. при работе с Spring или в целом с Injection Dependency вы используете статические методы намного меньше, чем вы могли бы быть. Сделайте его нестатичным. Когда вам нужно использовать свои 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(); 
    } 
} 
+1

+1. Я хотел бы добавить тот факт, что все бобы, созданные весной, по умолчанию являются одиночными. – adarshr

+2

@adarshr Мы должны быть осторожны. Они являются одноточечными в контексте Spring. –

+0

true, не лучший образец. будьте осторожны с источником данных. – fischermatte

1

Это скорее ошибка Java, чем весна.

Вам нужно объявить метод getData() не статическим.

+3

Если OP объявляет 'ComboPooledDataSource' статическим, это становится проблемой Spring, потому что' @ Inject' не будет работать, как есть. –

+0

Хороший улов, отредактированный. – UpAllNight

Смежные вопросы