@Scope(“ request”)不起作用

@Scope(“ request”)不起作用,第1张

@Scope(“ request”)不起作用

<context:component-scan base-package="com.test"/>
元件的扫描和注册所有豆类默认使用@Component,@Repository,@Service或@Controller的。

Spring还提供了对

javax.annotation.ManagedBean
(not
javax.faces.bean.ManagedBean
)和JSR-330标准注释的支持,Spring也对其进行了扫描,但是你需要在项目中添加以下依赖项。

<dependency>    <groupId>javax.inject</groupId>    <artifactId>javax.inject</artifactId>    <version>1</version></dependency>

你可以在此处看到Spring注释的所有等效注释,因为你可以看到@Component的等效名称为@Named,并且对于范围,请使用Springs @Scope注释而不是javax.inject.scope如上所述。所以,如果你想Spring来管理所有应用程序中的豆你可以使用

@Component
@Named
并且
javax.annotation.ManagedBean
使用@Autowired或@Inject注解并注入他们。

对于你的问题,为何使用Bean

javax.faces.bean.ManagedBean
似乎已初始化但不起作用,是因为如@BalusC所述,JSF不支持@Inject,因此你必须使用@ManagedProperty注释。

关于Spring和JSF的全部工作原理的一些背景知识:

实际上,当应用程序启动时,你的应用程序中现在有了两个带有JSF和Spring的IOC容器。首先,在faces-config.xml中配置的org.springframework.web.jsf.el.SpringBeanFacesELResolver委托给Spring根WebApplicationContext,首先将名称引用解析为Spring定义的bean,然后解析为底层JSF实现的默认解析器。

现在,当首先查找JSF bean时,将对其进行构造,然后通过setter方法设置托管属性,以便你可以使用@ManagedProperty注释注入Spring bean,如下所示:

package com.test.model;@ManagedBean@RequestScopedpublic class PersonalBean  implements Serializable {@ManagedProperty(value="#{personalService}")private IPersonalService personalService;public IPersonalService getPersonalService() {    return personalService;}public void setPersonalService(IPersonalService personalService) {    this.personalService= personalService;}

或者你也可以使用以下方式手动获取Spring bean

org.springframework.web.context.support.WebApplicationContextUtils
像这样:

private Object getSpringBean(String name){        WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(     (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext());        return ctx.getBean(name);}

并像这样使用它:

Personal_Basic personal_Basic = ((IPersonalService) getSpringBean("personalService")).getPersonalBasic();

但是,除了在你的应用程序中使用两个容器之外,你还可以使用Spring容器通过使用@Component注释JSF Bean来管理所有Bean,并且我没有意识到任何暗示,并且使用Spring注释应该是完全可以的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5021839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存