2013-03-17 2 views
0

Задача: заказRepository = null.
Как я понимаю orderRepository не вводится, потому что пользователь не bean, созданный Spring, а только объект, созданный с использованием new, а затем его свойства были установлены в dao?Инъекционный компонент динамически? Или @Autowire bean не создан Spring

Я заставляю пользователя как активный объект, так что вставляя репозиторий в класс модели. Любое решение, или, может быть, есть лучший способ?

@Controller 
class UserController { 
    ... 
     // Get user from DB 
     User user = userService.findUser(userId); 
     Order order = user.findOrder(orderId); 
    ... 
} 

@Component 
User { 
    @Autowired 
    OrderRepository orderRepository; 

    Order findOrder(long orderId) { 
     Order order = orderRepository 
       .findOrderOrThrowException(this.getId(), orderId); 
     return order; 
    } 
} 

+0

У вас есть директива компонента-сканирования, активированная в вашем приложенииContext.xml? . Как выглядит класс OrderRepository? –

+0

Да, я получил все это, и приложение больше, чем то, что выше :) и отлично работает с вложенным репо в модель, если только я не извлечу класс модели из БД. И этот ** Пользовательский компонент bean создается как новый User() в dao, тогда свойства заполняются из набора результатов. Класс Repo является обычным классом, у него есть dao. – Dmitry

ответ

0

User создается некоторое хранилище, я думаю. Поэтому вам нужно ввести OrderRepository. Возможно, ваш ORM/DB framework поддерживает Interceptors, тогда вы можете иметь центральное место, где вы вводите OrderRepository. Или пусть Spring создаст пустой экземпляр с введенным OrderRepository, а фреймворк заполнит его значениями из БД.

Для экземпляров User, которые не созданы репозиторием, Spring выполнил бы эту работу.

Или вы просто ставите orderRepository статический член, который имеет больше смысла imho.