2017-02-01 24 views
0

я хотел бы использовать CDI с POJO.wildfly - использование CDI с POJO

Теперь у вас есть Jaxrs Resteasy webapp, работающий в Wildfly 10.1.0.Final.

Существует одноэлементно, который возвращает класс ServiceImpl:

public class ServiceFactory { 

    private static Service service = new ServiceImpl(); 

    public static Service getEnvsApi() 
    { 
     return service; 
    } 
} 

И я хотел бы использовать CDI внутри класса ServiceImpl

public class ServiceImpl extends Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 
} 

но myData всегда нуль.

Можно ли вручную начать сварку?

ответ

0

Вы также должны ввести Сервис в ServiceFactory, потому что, если вы его создаете, он не находится под управлением CDI.

Возможно, вы можете полностью удалить ServiceFactory и ввести службу везде, где она вам нужна.

1

Если ваш webapp работает в Wildfly, вам не нужно «запускать» Weld. Просто используйте CDI API в своем коде и добавьте beans.xml в webapp/WEB-INF (посмотрите режим обнаружения бина CDI), и CDI будет активирован.

Что касается вашей проблемы, проблема заключается в том, что вы создаете службу через нового оператора, который разбивает CDI! Ss сказал в других ответах, вы должны использовать @ApplicationScoped на ServiceImpl, и вам не нужно ServiceFactory.

Просто объявить ServiceImpl, как @ApplicationScoped

@ApplicationScoped 
public class ServiceImpl implements Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 

} 

И тогда вы можете @Inject ваш Service:

@Inject 
private Service service