Зачем вам использовать отражение?Почему бы просто:
SampleClass action = new SampleClass();
action.setRequest(request);
Это делает то же самое, но более читабельно, позволяет компилятору проверить, что типы и методы действительно существуют, предоставляет вам Javadoc для вызванного метода, позволяет вашей IDEпомочь в рефакторинге, ...
И все же это внедрение зависимостей, потому что действие не ищет его запрос, а получает запрос во время инициализации.
Редактировать : Турбьёрн попросил показать, как будет использоваться это действие.Само по себе оно будет введено (с помощью установщика) в любой компонент, использующий действие.Компонент будет использовать внедренный объект действия.
SampleClass action = new SampleClass();
action.setRequest(request);
Servlet servlet = new ActionBasedServlet();
servlet.setAction(action);
Если servlet
предназначен для жизни дольше, чем action
, то есть он должен использовать новый Action
каждый раз, когда ему это нужно, можновместо этого setter-inject ActionFactory
в servlet
.
В этом конкретном случае я бы задался вопросом, действительно ли действие должно сохранять запрос как часть его состояния, или оно может быть неизменным и просто действоватьна запрос, переданный сервлетом в качестве параметра метода.В этом случае инициализация во время загрузки будет выполнена:
SampleClass action = new SampleClass();
Servlet servlet = new ActionBasedServlet();
servlet.setAction(action);
и ActionBasedServlet
определят
public void serve(Request req, Response resp) {
foo();
action.act(req, resp);
bar();
}