Весна: правильный способ сделать модель доступной для контроллера? - PullRequest
1 голос
/ 23 августа 2010

Учитывая следующий контроллер,

@Controller
public class MyController 
{
    ...

    @RequestMapping("/data")
    public @RequestBody Data getData(@RequestParam String id) 
    {
        return myCustomModel.queryForData(id);
    }
}

, как правильно настроить его так, чтобы myCustomModel (что-то, что запрашивается для Data) было доступно MyController?Я видел такую ​​причуду с автопроводкой, и я бы тоже хотел это сделать.

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Для производственного кода разумно объявить зависимости явно, а не использовать autowire, чтобы в производственной настройке было меньше движущихся частей.Это похоже на хорошую практику использования только полностью определенных операторов импорта вместо import my.super.project.dao.*

(кстати, автоматическая разводка очень полезная функция для интеграционных тестов)

Так что подключатьХороший путь к производству - это просто вставка зависимостей старого конструктора в конечные поля.Использование окончательных полей, где это возможно, минимизирует изменчивость .

Класс обслуживания, который получает даос посредством инъекции:

public class CompanyService implements ICompanyService {

   private final EmployeeDao employeeDao;
   private final DepartmentDao departmentDao;

   public CompanyService(EmployeeDao employeeDao, DepartmentDao departmentDao) {

     this.employeeDao = employeeDao;
     this.departmentDao = departmentDao;
   }

   ...
}

И затем контроллер получает сервис посредством инъекции (используятип интерфейса):

@Controller
public class MyController 
{
    private final ICompanyService companyService;

    public MyController(ICompanyService companyService) {
      this.companyService = companyService;
    }

    @RequestMapping("/data")
    public @RequestBody Data getData(@RequestParam String id) 
    {
        return companyService.queryForData(id);
    }
}
0 голосов
/ 23 августа 2010

Ваш контроллер никогда не должен вызывать уровень DAO напрямую (простая причина, если вы хотите выполнить некоторые транзакции, ваш уровень контроллера не поддерживает его). Вы должны внедрить службу (@Service) и вызвать из нее метод службы, который может внутренне вызвать один или несколько методов DAO в области транзакций и вернуть итоговый модальный тип для отправки в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...