2016-08-04 81 views
0

我想知道如何在java对象中的Autowire sprig bean不受Spring应用程序上下文管理。 我创建了一个类的实例,但随后的自动装配对象为空。例如。春天非托管对象的自动装配

@Service 
Class BaseFactory { 
public BaseObject getObject(String type){ 
    BaseObject object = null; 
    if(type.equalsIgnoreCase("order")){ 
     object = new FirstServiceObject(); 
    } 
    else if(type.equalsIgnoreCase("payment")){ 
     object = new SecondServiceObject(); 
    } 
    return object; 
} 

服务类

@Service 
@Configurable 
public class FirstServiceObject{ 

@Autowired 
UserRepository mUserRepository;// coming as null 

@Autowired 
UserHelper userHelper;//coming as null 

public getDownloadedData(String userName, String b){ 
    User user = userHelper.findUser(userName); //null pointer exception 
} 

}从那里,我呼吁上述

我的帮助类。

public class SomeHelper { 

@Autowired 
BaseFactory baseFactory; 

public processUser(){ 
BaseObject object = baseFactory.getObject("order"); 
object.getDownloadedData("sunil","someString") 
} 

所有自动装配Autowired豆即将为空内FirstServiceObject

我与已经给了所有可能的解决方案检查并没有一个似乎是为我工作。

+0

你注释@Component来你BaseFactory? – emotionlessbananas

+0

为什么你甚至使用工厂,这只会使事情变得复杂。为什么不直接将服务直接注入需要它的类?尽管如此,让Spring管理服务,不要自己创建实例。 –

+0

@Asterisk是的我试过了,也没有为我工作。 –

回答

0

你不能

如果你想自动连接春豆类,这个类需要由Spring管理。

0

如果应用程序正在使用的网络环境,然后尝试在下面的帖子给出这个

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 
1

回答解决了问题。 How to inject dependencies into a self-instantiated object in Spring? 这是我做了什么

public class SomeHelper { 

    @Autowired 
    BaseFactory baseFactory; 

    @Autowired 
    AutowireCapableBeanFactory beanFactory; 

    public processUser(){ 
    BaseObject object = baseFactory.getObject("order"); 
    beanFactory.autowireBean(object); 
    object.getDownloadedData("sunil","someString"); 
} 
}