动态实例化CDI bean或注入非cdi-beans

时间:2015-10-26 10:06:25

标签: java-ee dependency-injection cdi weld

我是CDI的新手,希望有人可以帮助我。

好吧,让我解释一下问题:
我实现了一个由JSF EL调用的主bean。该bean处理对象列表。想象一下像List<Car>这样的东西。 这些car对象是在主bean的@PostMethod方法中构造的 另外,我有一些服务类,例如CarServices提供类似public static List<Car> getCarsOfBrand(Session session, Brand brand)的内容。 在服务类中,Hibernate会话用于运行查询并返回应得列表 所以,好吧......我想摆脱传递会话对象。所以我的计划是注入它。 我创建了一个SessionScoped bean&#34; PersistenceUnit&#34; (可能是该名称已经预先分配,对不起......)使用方法public Session getCurrentSession()。 我只想在我的所有Service类中注入这个bean,只需调用getCarsOfBrand(Brand brand)之类的东西。 问题是,我无法将CDI bean注入非bean。 (汽车目前只是一个POJO)。 我试图通过添加@SessionScoped将汽车声明为CDI bean来处理这个问题。 但接下来的问题是,Car对象是由我而不是Container实例化的。 我试过像

这样的东西
@Produces
public Car createCar() {
     return new Car();
}

但这也没有成功:我认为这个带注释的方法会返回汽车的代理。但什么都没发生。汽车内部的注入场仍为空,其@PostConstruct方法也从未被调用过。

你能帮助我吗?将当前上下文(会话)注入我的服务类的正确方法是什么?

谢谢! :-)

1 个答案:

答案 0 :(得分:1)

所以,我自己找到了解决方案! : - )

我将服务类注释为@ApplicationScoped并注入我需要的任何东西。 Car-Class使用该服务但不是bean本身。 为此我在实例化对象时使用DeltaSpike作为注入:

WITH 
  SET [XL3WithSet0] AS 
    {
      (
        [Measures].[Original Exposure Amount - Drilldown]
       ,[ExpPortfolioType].[ExposurePortfolioType].[All].[COREP - CRD IV].[Standardised]
       ,[PortfolioType].[PortfolioType].[All]
       ,[CRMGroup].[CRMGroup].[All]
       ,[CCFBand].[Hierarchy].[All]
       ,[DrilldownCreditRisk].[InflowOutflowFlag].[All]
      )
    } 
...**********another 25 sets combining [Measures] AND selected dimensions*****
SELECT 
  {
    [XL3WithSet0]
   ,[XL3WithSet1]
   ,[XL3WithSet2]
   ,[XL3WithSet3]
   ,[XL3WithSet4]
   ,[XL3WithSet5]
   ,[XL3WithSet6]
   ,[XL3WithSet7]
   ,[XL3WithSet8]
   ,[XL3WithSet9]
   ,[XL3WithSet10]
   ,[XL3WithSet11]
   ,[XL3WithSet12]
   ,[XL3WithSet13]
   ,[XL3WithSet14]
   ,[XL3WithSet15]
   ,[XL3WithSet16]
   ,[XL3WithSet17]
   ,[XL3WithSet18]
   ,[XL3WithSet19]
   ,[XL3WithSet20]
   ,[XL3WithSet21]
   ,[XL3WithSet22]
   ,[XL3WithSet23]
   ,[XL3WithSet24]
   ,[XL3WithSet25]
  } ON COLUMNS
  --Non Empty   
 ,{
    [DrilldownCreditRisk].[ExposureDrilldown].[All].[Legal Entity 2].[CBRC Repo style MarketParticipant  40089].[Exp No. 14660042].[UNSECURED].[Unsecured - Undrawn Tranche]
   ,[DrilldownCreditRisk].[ExposureDrilldown].[All].[Legal Entity 2].[CBRC Repo style MarketParticipant  40089].[Exp No. 14660042].[UNSECURED].[Unsecured - Drawn Tranche]
  } ON ROWS
FROM [COREP Credit Risk]
WHERE 
  (
    [Time].[Time].[All]
   ,[Scenario].[Scenario].[All]
   ,[ConsolidationProfile].[ConsolidationProfile].[All]
   ,[ExposureType].[ExposureType].[All].[COREP Reporting - CRD IV]
   ,[IntragroupFlag].[IntragroupFlag].[All]
  )
CELL PROPERTIES VALUE;

希望将来可以帮助别人! : - )