2016-08-17 63 views
0

我想创建一个对象,只要它不存在于数据库中。 在普通的Java我会做类似弹簧DI和创建对象

MyObject getObject(String id) { 
     MyObject myObject = myDao.getById(id); 
     if(myObject == null) { 
      myObject = new MyObject("Some Parameter"); 
     } 
     return myObject; 
} 

我现在想使用Spring这一点。 我的想法是使用预先注入的工厂。 东西在(但构造器注入)方向:

@Autowired 
MyObjectFactory myObjectFactory; 

MyObject getObject(String id) { 
     MyObject myObject = myDao.getById(id); 
     if(myObject == null) { 
      myObject = myObjectFactory.newInstance("Some Parameter"); 
     } 
     return myObject; 
} 

但可以肯定我想问什么选项有和方法是优选的同泉DI线去。

* EDIT 1 * 修正自动装配Autowired注解

* EDIT 2 * Copyinf从我的意见一个

我必须具有比在此示出在getObject方法多比特逻辑。

我必须检查不同的唯一键才能找到匹配的对象,并且只有当我找不到具有不同方法的对象时,才会创建一个新对象。我只是保持小问题的代码。 这就是为什么我宁愿不使用创建如果找不到的方法。

另外,我尝试保持代码可测试性并从方法中抽象创建对象。

+0

没有错的想法,但Spring的注解依赖注入的是'@ Autowired'而不是'@ Autoinject'。 – Jesper

+0

不是一个Id意味着对象已经存在于数据库中? – farrellmr

+0

@Jesper,谢谢,修正它。没有考虑解决方案,而编写关于SO的演示代码的问题将有所帮助;) – Xtroce

回答

0

“我只想在database上不存在的情况下创建一个对象。”

我认为你可以使用知识库检查是否有objectid 如果不是 - 然后创建它。

要使用repository使用e.g:

@Autowired 
private PersonRepository repository; 

然后检查是否元素存在使用:

repository.findOne(id); 

什么不对的这种做法?

Spring repository:

http://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html

+0

这种方法是有效的,我已经使用它了,但是我必须在getObject方法中有更多的逻辑。我必须检查不同的唯一键以找到匹配的对象,并且只有当我找不到任何不同的方法时,我才会创建一个新的。我只是保持小问题的代码。这就是为什么我宁愿不使用创建如果找不到的方法。 – Xtroce