2012-04-12 4 views
3

Мне нужно знать, как работает applatoncontextaware. У меня есть applicationContext.xml, у которого есть некоторый ресурс импорта (другой applicationContext). Мне нужно использовать applicationContext.xml в моем классе java, чтобы использовать в нем весенние бобы.ApplicationContextaware works

Я познакомился с классом applicationcontextaware, который используется для получения весенних бобов внутри класса java. У приложения Applicationaware есть методы set и getapplicationcontext(). getapplicationcontext() определяется как статический.

Как приложениеcontextware загружает applicationContext.xml? нужно ли мне указывать местоположение applicationContext.xml, чтобы загрузить приложениеcontextaware? Как я могу использовать его в своем классе java?

+0

Я создал ApplicationContextProvider, который реализует ApplicationContext осознанным. Я определил его в applicationContext.xml как Jessie

+0

Я лично использовал его в гибридном корпоративном приложении, которое изначально было построено на struts; но в последнее время мы начали вводить весенние бобы и контекст. Здесь мы не загружаем контекст приложения с помощью web.xml, но вместо этого используем ApplicationContextAware – user2815984

ответ

15

Вы вводите в заблуждение несколько вещей. Прежде всего речь идет о классе ApplicationContextAware, не так ли? Она имеет только один метод:

setApplicationContext(ApplicationContext applicationContext) 

Что вы обычно реализовать так:

public class MyFancyBean implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    void setApplicationContext(ApplicationContext applicationContext) { 
    this.applicationContext = applicationContext; 
    } 

    public void businessMethod() { 
    //use applicationContext somehow 
    } 

} 

Однако редко требуется доступ к ApplicationContext напрямую. Обычно вы запускаете его один раз и позволяете фасолям автоматически заполняться.

Мне нужно использовать applicationContext.xml в моем классе java, чтобы использовать в нем весенние бобы.

Здесь вы идете:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

Обратите внимание, что вы не должны упоминать файлы уже включены в applicationContext.xml. Теперь вы можете просто принести один компонент по имени или типу:

ctx.getBean("someName") 

Обратите внимание, что есть много способов, чтобы начать весной - с помощью ContextLoaderListener, @Configuration класса и т.д.

+0

У меня есть сомнение в том, что мы загружаем контекст приложения, такой как ApplicationContext ctx = new ClassPathXmlApplicationContext ("applicationContext.xml"); то wats цель applicationcontextaware? – Jessie

+0

@ramya: ну, скажите мне :-). Как я уже сказал, это редко необходимо, большую часть времени ваши бобы свободны от зависимостей Spring, подобных этому. –

+2

Возможно, вам понадобится, если Spring не находится под прямым контролем всего вашего приложения, например, если вы используете Spring из экземпляра сервера приложений, но вы хотите связать экземпляры из двух вместе. Из ApplicationContextAware javadoc они перечисляют ряд других возможностей, но также предоставляют вам предпочтительные альтернативы, т. Е. Если вы абсолютно не можете использовать конфигурацию XML/Annotations, вы не должны захватывать непосредственно из контекста. –