Hello Thomas,Many thanks! It works. ------------------------------------------------------------------From:Thomas Andraschko <[email protected]>Time:2016 Jul 20 (Wed) 16:34To:DeltaSpike Maillist - Users <[email protected]>; rickqinj <[email protected]>Subject:Re: Restrictions of using BeanProvider? Hi,
BeanProvider just works for managed beans as it just "provide beans" from the underlying CDI container. If you would like to do injection in a unmanaged object, you can do the following: MyUnmanagedBean a = new MyUnmanagedBean(); BeanProvider.injectFields(a); Regards, Thomas 2016-07-20 9:13 GMT+02:00 rickqinj <[email protected]>: Hello,The BeanProvider makes me confused for a few days. Could anyone help me out?The problem in my case is that I cannot get an instance of a non-managed class by BeanProvider.getContextualReference() method.I listed my case as following: // DeltaSpike 1.4.2, Weld 1.1.31, CDI 1.0-SP4 //--Class A--public class A { //member fields private B b; //Constructor with parameters. public A(String p1, String p2, String p3) { //...just do something. } public B getInstanceOfB() { b = BeanProvider.getContextualReference(B.class, false); return b; } } //--Class Caller--@Named public class Caller { //... public void action() { A a = new A("s1", "s2", "s3"); B b = a.getInstanceOfB(); //<-------- I cannot get an instance of B. } //... } The class A is a non-managed bean, and Caller is managed. Am I do wrong with BeanProvider? What should I do to get the instance of B?Ps. I cannot make the class A managed, it may cause refactoring of all project. (~that's awful~)And according to the error log, it seems that a missing InjectionPoint may caused this problem. Many thanks for your help!
