Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 动态注入bean?或者@Autowire bean不是由Spring创建的_Spring Mvc_Javabeans_Autowired - Fatal编程技术网

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

Spring mvc 动态注入bean?或者@Autowire bean不是由Spring创建的,spring-mvc,javabeans,autowired,Spring Mvc,Javabeans,Autowired,问题:orderRepository=null 据我所知,orderRepository没有被注入,因为user不是Spring创建的bean,而是使用new创建的对象,然后在dao中设置了它的属性 我将用户作为活动对象,以便将存储库注入模型类。有什么解决办法,或者有更好的办法 @Controller class UserController { ... // Get user from DB User user = userService.findUs

问题:orderRepository=null
据我所知,orderRepository没有被注入,因为user不是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;
    }
}

我想,用户
是由某个存储库创建的。因此,您必须自己注入一个
OrderRepository
。也许您的ORM/DB框架支持拦截器,那么您可以在一个中心位置插入
OrderRepository
。甚至让Spring用注入的
OrderRepository
创建一个空实例,框架用DB中的值填充它

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


或者您只需将
orderRepository
设置为静态成员,这在imho中更有意义。

您的applicationContext.xml中是否激活了组件扫描指令。OrderRepository类是什么样子的?是的,我都知道了,应用程序比上面的更大:),并且可以很好地将repo注入到模型中,除非我从DB检索模型类。这个用户bean在dao中创建为new User(),然后从结果集中填充属性。Repo类是常规类,具有自动连接到它的dao。