【发布时间】:2016-08-22 16:36:56
【问题描述】:
通过了解“挂毯的工作原理”再次遇到一个小问题。
我有一个 Tapestry 组件(在本例中是一个值编码器):
public class EditionEncoder implements ValueEncoder<Edition>, ValueEncoderFactory<Edition> {
@Inject
private IEditionManager editionDao;
public EditionEncoder(IEditionManager editionDao) {
this.editionManager = editionDao;
}
@Override
public String toClient(Edition value) {
if(value == null) {
return "";
}
return value.getName();
}
@Override
public Edition toValue(String clientValue) {
if(clientValue.equals("")) {
return null;
}
return editionManager.getEditionByName(clientValue);
}
@Override
public ValueEncoder<Edition> create(Class<Edition> type) {
return this;
}
}
注入管理器不起作用,因为编码器是在这样的页面中创建的:
public void create() {
editionEncoder = new EditionEncoder();
}
因此,我不得不使用这个丑陋的解决方案:
@Inject
private IEditionManager editionmanager;
editionEncoder = new EditionEncoder(editionManager);
有没有更好的方法在运行时注入组件,或者一般来说有更好的解决方案吗?
提前感谢您的帮助,
【问题讨论】:
标签: java service dependencies code-injection tapestry