@Inject不成功,请banq和大家帮助一下

14-05-15 javaGhost
为了避免针对每一Model都去写repository,想把repository写成通用的形式,发现改写后,@Inject就不成功了。代码如下:

有一个域对象Stock
@Model
public class Stock{
@Inject
public StockEvent domainEvent;
......


其repository的get方法是:
@Around
@Override
public Stock getStock(String stockId) {
...

没问题,@Injec成功,运行正常。

修改repository的get方法为:
@Around
@Override
public Object getObject(String id,Class clazz) {
...
}

出现问题,domainEvent为null,说明@Inject没执行,运行出错。

如何完善,使得通用repository的getObject方法执行时,Model中的@Inject能发挥作用。

谢谢大家!

[该贴被javaGhost于2014-05-15 18:06修改过]

banq
2014-05-15 18:42
2014-05-15 18:03 "@javaGhost"的内容
使得通用repository的getObject方法执行时 ...


多谢很好,这有待提高,getObject方法多一个参数就不行了,如果变成通用方法,可能需要方法参数的annotation,否则框架不知道getObject几个方法参数中是Object的Id,可能需要一个@Id的方法参数注释,稍微增加复杂性了。会平衡考虑的。

javaGhost
2014-05-16 09:07
谢谢benq的回复。
一种方法是约定每个model都必须有一个名为id的关键字属性。
第二种方法是用annotation,可以定义实体聚合根对象@[author]Model时就确定[/author],如:@Model("id")
建议用第二种方法。

[该贴被javaGhost于2014-05-16 09:14修改过]

[该贴被javaGhost于2014-05-16 09:17修改过]

banq
2014-05-16 10:52
谢谢,第二种方法比较好。