Я пытаюсь заставить guice вызвать мой заводский метод для создания экземпляра, а затем заполнить его из проверки его аннотаций. Я знаю, что я сделал это раньше, но я не могу понять, как связать следующий код ....Как ухаживать за моей фабрикой для создания новых экземпляров
Мой привязывать код
binder.bind(ProcessorFactory.class).asEagerSingleton();
код я привязки (и я хочу, чтобы заполнить Guice в SplineProcessor и InvertProcessor с их креплениями по созданию
public class ProcessorFactory implements Provider<Processor>{
public static final ThreadLocal<String> threadLocal = new ThreadLocal<String>();
private Map<String, Class<?>> nameToClazz = new HashMap<String, Class<?>>();
public ProcessorFactory() {
nameToClazz.put("splineV1Beta", SplineProcessor.class);
nameToClazz.put("invertV1Beta", InvertProcessor.class);
}
@Override
public Processor get() {
String moduleName = threadLocal.get();
if(moduleName == null)
throw new IllegalArgumentException("Please call ProcessorFactory.threadLocal.set(moduleName)");
Class<?> clazz = nameToClazz.get(moduleName);
if(clazz == null)
return null;
try {
Object newInstance = clazz.newInstance();
return (Processor) newInstance;
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} finally {
threadLocal.set(null);
}
}
}
ПРИМЕЧАНИЕ. Я все же хотел бы знать, как сделать это, хотя у меня есть этот открытый вопрос, который еще лучший способ сделать то же самое guice multibinder with Providers
, но, к сожалению, я не могу заставить это работать.
ПРИМЕЧАНИЕ. Какой код инъекции я также использую. Я использую следующий код для инъекции (и также попробовал ProcessorFactory).
@Inject
private Provider<ProcessorSetup> processors;
РЕДАКТИРОВАТЬ ДЛЯ БОЛЕЕ CLARIY
В боба У меня есть следующий
@Inject
private Provider<ProcessorSetup> processors;
и когда я называю processors.get(), это шаги в Guice, а затем правильно Guice вызывает ProcessorFactory. get(), и я прохожу через этот код, и мой новый entitiy проходит через Guice, чтобы быть возвращенным клиенту, но никогда не подключен к чему-либо. Это воняет, потому что у нас есть @Inject в тех сущностях, которые мы создаем. Я знаю, что около 2 лет назад я имел эту работу на другом проекте, связанном с этих постов
как я выяснить, как удалить форсунку в одной точке, наконец.
спасибо, Дин
Хммм, я думал, что это сработало раньше, не имея инжектора ... штопать. Мне нужно опробовать вспомогательную инъекцию и задать вопросы по этому вопросу, когда у меня есть проблемы. –
Единственное, что могло бы сработать, это статические инъекции (но я не думаю, что это то, что вы хотите). Для простого примера изготовленной на заказ фабрики вы можете проверить, как это реализовано Guartz (Guice + Quartz). http://code.google.com/p/slurry/source/browse/quartz4guice/trunk/src/main/java/org/slurry/quartz4guice/internal/InjectorJobFactory.java –
приятно, вы можете вводить инжектор. .. Я не думал/знал, что это возможно. –