Использование GWT У меня есть класс Java:
public class Pojo {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
Вышеупомянутый класс совместно используется клиентским и серверным кодом.
Из клиентского кода я хотел бы получить динамический доступ к свойству . То есть, я хотел бы написать метод со следующей сигнатурой:
public String getProperty(Object o, String propertyName)
Чтобы следующий код работал:
Pojo pojo = new Pojo();
pojo.setName("Joe");
getProperty(pojo, "name"); // this should return "Joe"
Очевидно, что отражение Java отсутствует. И я пробовал следующий метод JSNI:
public static native String getProperty(Object o, String name) /*-{
return o[name];
}-*/;
Но это не работает.
Специальный синтаксис для доступа к объектам Java из JavaScript также не может использоваться, поскольку я хочу, чтобы он был динамическим.
Есть идеи, как я могу это сделать?
Для полноты, я также хочу иметь возможность динамически устанавливать свойство.
РЕДАКТИРОВАТЬ: ответ blwy10 был отличным советом, который помог мне выполнить поиск с помощью " gwt reflection "вместо таких терминов, как"
Глядя на сообщение Карла Сегина, в котором он показывает, что проектирование с учетом тестируемости приводит к лучшему дизайну, в данном случае композиция важнее наследования .
В этом примере его CachedEmployeeLookup
зависит от EmployeeLookup
, которые реализуют один и тот же интерфейс, IEmployeeLookup
Как бы вы настроили это в StructureMap, чтобы что программа по умолчанию использует класс CachedEmployeeLookup
, в то время как CachedEmployeeLookup
получает введенный ему EmployeeLookup
?
Я думаю, что-то вроде этого будет работать:
For<IEmployeeLookup>().Add<EmployeeLookup>().
Named("employeeLookup");
For<IEmployeeLookup>().Use<CachedEmployeeLookup>()
.Ctor<IEmployeeLookup>().Is(
d => d.TheInstanceNamed("employeeLookup"));
Вы можете использовать EnrichWith
при настройке сопоставления типов, например
ObjectFactory.Initialize(i =>
{
i.For<IDecorator>().Use<Inner>().EnrichWith(d => new Decorator(d));
});
На этой странице есть несколько примеров перехвата в StructureMap