java cdi spring_java – 使用CDI @Inject注入Spring bean

我正在尝试将

Spring上下文中定义的bean注入CDI托管组件,但我没有成功.不注入bean,而是每次执行注入时都会创建一个新实例.我的环境是使用JBoss Weld的Tomcat 7.

Spring ApplicationContext是直截了当的:

...

...

CDI托管bean看起来像这样:

@javax.inject.Named("testA")

public class TestA {

@javax.inject.Inject

private Test myTest = null;

...

public Test getTest() {

return this.myTest;

}

}

这是我的faces-config.xml

org.springframework.web.jsf.el.SpringBeanFacesELResolver

但是,当我从JSF页面访问test属性时,每次访问时都会创建一个新的Test实例.这是一个简单的例子:

...

1:

2:

...

我得到以下输出:

1: test.Test@44d79c75

2: test.Test@53f336eb

刷新后:

1: test.Test@44d79c75

2: test.Test@89f2ac63

我可以看到第一个输出是正确的.无论我多久刷新一次页面,testFromSpring都会返回Spring上下文中定义的bean的值.但是第二个输出清楚地表明,每次调用测试组件上的getTest方法时,都会创建并注入一个新的Test实例,而不是像我期望的那样使用Spring上下文中的实例.

那么,这种行为的原因是什么?

如何将Spring上下文中的bean注入CDI托管bean?

我也尝试使用在Spring上下文中定义的名称的限定符,但现在抛出一个异常,表明找不到bean:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Injection point has unsatisfied dependencies. Injection point: field test.TestA.myTest; Qualifiers: [@javax.inject.Named(value=testFromSpring)]

代码

@javax.inject.Named("testA")

public class TestA {

@javax.inject.Inject

@javax.inject.Named("testFromSpring")

private Test myTest = null;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值