动态注入bean?或@Autowire bean不是由Spring创建的

时间:2013-03-17 15:57:17

标签: spring-mvc javabeans autowired

问题: orderRepository = null
据我所知,orderRepository没有注入,因为用户不是由Spring创建的bean而只是使用 new 创建的对象,然后在dao中设置了它的属性?

我正在将用户作为活动对象,因此将存储库注入模型类。任何解决方案,或者可能有更好的方法?

@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;
    }
}

@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; } }

1 个答案:

答案 0 :(得分:0)

我想,

User是由某个存储库创建的。所以你必须自己注射OrderRepository。也许您的ORM / DB框架支持拦截器,然后您可以在注入OrderRepository的中心位置。或者甚至让Spring使用注入的OrderRepository创建一个空实例,框架用数据库中的值填充它。

对于不是由存储库创建的User实例,Spring将完成这项工作。

或者你只是让orderRepository成为静态成员,这更有意义。