10

मैं एक प्रबंधित संपत्ति के रूप में एक डीएओ इंजेक्ट करने की कोशिश कर रहा हूं। के बाद सेम बनाई गई हैप्रबंधित बीन कन्स्ट्रक्टर में इंजेक्शन निर्भरता तक पहुंचने से NullPointerException

public class UserInfoBean { 

    private User user; 

    @ManagedProperty("#{userDAO}") 
    private UserDAO dao; 

    public UserInfoBean() { 
     this.user = dao.getUserByEmail("[email protected]"); 
    } 

    // Getters and setters. 
} 

डीएओ वस्तु इंजेक्ट किया जाता है, लेकिन यह निर्माता और इसलिए NullPointerException पैदा करने में null है। इंजेक्शन प्रबंधित संपत्ति का उपयोग कर प्रबंधित बीन कैसे शुरू कर सकता हूं?

उत्तर

18

इंजेक्शन केवल निर्माण के बाद ही हो सकता है क्योंकि निर्माण से पहले कोई योग्य इंजेक्शन लक्ष्य नहीं है। निम्नलिखित काल्पनिक उदाहरण की कल्पना करें:

UserInfoBean userInfoBean; 
UserDao userDao = new UserDao(); 
userInfoBean.setDao(userDao); // Injection takes place. 
userInfoBean = new UserInfoBean(); // Constructor invoked. 

यह तकनीकी रूप से संभव नहीं है। हकीकत में निम्नलिखित क्या हो रहा है यह है:

UserInfoBean userInfoBean; 
UserDao userDao = new UserDao(); 
userInfoBean = new UserInfoBean(); // Constructor invoked. 
userInfoBean.setDao(userDao); // Injection takes place. 

आप एक विधि @PostConstruct साथ एनोटेट सीधे निर्माण और निर्भरता इंजेक्शन के बाद (वसंत सेम जैसे, @ManagedProperty, @EJB, @Inject आदि द्वारा) कार्रवाई करने के लिए उपयोग करना चाहिए ।

@PostConstruct 
public void init() { 
    this.user = dao.getUserByEmail("[email protected]"); 
} 
संबंधित मुद्दे