自动装配弹簧非托管对象

时间:2016-08-04 12:54:52

标签: java spring dependency-injection autowired

我想知道如何在java对象中自动装配不受spring应用程序上下文管理的sprig bean。 我创建了一个类的实例,但后续的自动装配对象为null。例如。

@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 bean在FirstServiceObject中都为null

我已经检查了所有可能的解决方案,似乎没有一个对我有用。

3 个答案:

答案 0 :(得分: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");
 }
}

答案 1 :(得分:0)

你不能

如果你想在你的班级中使用Autowired spring bean,那么这个类需要由Spring管理。

答案 2 :(得分:0)

如果您的应用程序正在使用Web上下文,请尝试此

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);