1

我有带有注释的 Spring bean:

@Named
@Scope("session")

而这个bean属性:

@Autowired
ApplicationContext appContext;

Spring 配置文件具有条目(适用于其他注释/注入):

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

为什么在这样的代码和配置之后 appContext 为空?

我正在尝试获取 ApplicationContext (在其上调用 getBean(...) ),这在以前的 Spring 版本中可能是相当复杂的任务(从其他讨论来看)(例如,需要在 Spring Web 应用程序中获取 ServletContext 以创建 ApplicationContext对于不直接访问 HTTP 请求对象的 bean,获取 ServletContext 可能是一项相当复杂的任务)。据我了解,在 Spring 3.x 中,可以使用简单的 @Autwired 注入。如何访问 AppContext?

4

1 回答 1

2

这里的第一个问题是您使用@Named的是 Java EE 注释,而据我所知,Spring 尚不支持 Java EE 注释。因此,不要@Named尝试使用 Spring 注释 @Service、@Component、@Repository 等。

这是我使用 JSF 托管 bean 的示例,以展示如何集成 bean。

@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";
    }
}
于 2013-05-30T03:16:51.560 回答