2013-05-29 3 views
1

У меня есть Spring боб с аннотациями:Почему Spring @Autowired ApplicationContext appContext имеет значение null?

@Named 
@Scope("session") 

И это свойство компонента:

@Autowired 
ApplicationContext appContext; 

Файл конфигурации Spring имеет запись (которая работает для других АННОТАЦИИ/инъекций):

<context:component-scan base-package="my.package.name" /> 

Почему appContext является нулевым после такого кода и конфигурации?

Я пытаюсь получить ApplicationContext (для вызова getBean (...) на нем), и это может быть довольно сложной задачей (судя по другим обсуждениям) в предыдущих версиях Spring (например, требуется получить ServletContext в Spring web приложение для создания ApplicationContext и получение ServletContext может быть довольно сложной задачей для bean-компонентов, которые не имеют прямого доступа к объектам HTTP-запроса). Весной 3.x, как я понимаю, можно использовать простую @Autwired инъекцию. Как можно получить доступ к AppContext?

+0

вместо использования контекста приложения лучше использовать @Autowired для ввода/получения bean-компонента –

ответ

2

Здесь первая проблема заключается в использовании @Named, который представляет собой аннотацию Java EE, и, насколько я знаю, Spring еще не поддерживает аннотации Java EE. Следовательно, вместо использования @Named попробуйте использовать аннотацию Spring @Service, @Component, @Repository и т. Д.

Вот пример для вас. Я использовал управляемый компонент JSF, чтобы показать, как интегрировать компоненты.

@ManagedBean(name="myBacking") 
@RequestScoped 
public class MyBacking { 

    private String myText; 

    @ManagedProperty(value="#{mySpring}") 
    MySpringBean mySpring; 

    public String getMyText() { 
     myText = mySpring.getText(); 
     return myText; 
    } 

    public void setMyText(String myText) { 
     this.myText = myText; 
    } 

    public MySpringBean getMySpring() { 
     return mySpring; 
    } 

    public void setMySpring(MySpringBean mySpring) { 
     this.mySpring = mySpring; 
    } 


} 

@Service("mySpring") 
@Scope("request") 
public class MySpringBean { 

    @Autowired 
    MySecond mySecond; 

    public String getText(){ 
     return "Hello KP" + mySecond.appObj(); 
    } 

} 


@Service 
@Scope("request") 
public class MySecond { 

    @Autowired 
    ApplicationContext applicationContext; 

    public String appObj(){ 
     MyThrid mythird =(MyThrid)applicationContext.getBean("myThrid"); 
     return "My Second Bean calld "+ mythird.getTxt(); 
    } 
} 

@Service 
public class MyThrid { 

    public String getTxt(){ 
     return "from thrid Bean"; 
    } 
} 
Смежные вопросы