如何通过请求实例化Spring MVC中的Class / Bean?

时间:2012-04-26 11:25:13

标签: java spring-mvc inversion-of-control

首先,我对Springframwork很新。

假设我在Spring-MVC中有一个控制器:

@Controller
public class FooController {

    @Autowired
    private Foo foo;

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/addfoo", method = RequestMethod.GET)
    public void addRequest(          
        @RequestParam(value="rq_param", required=true) String param){

        foo.setValue(param);    
        fooService.addFoo(foo);                     
    }
}

我需要将Foo添加到数据库中。但在我需要设置一个值之前。当某个请求进入(来自其他地方)时,就会发生这种情况。

这是我的服务:

@Service
public class FooServiceImpl implements FooService {

    @Autowired
    private FooDAO fooDAO;

    @Transactional
    public void addFoo(Foo foo) {
        fooDAO.addFoo(foo);
    }
}

但这不起作用。我得到了

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fooController': Injection of autowired dependencies failed;

由于我对IoC缺乏了解,我很确定我犯了一个基本错误......

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为你不应该注入Foo。它看起来像我的模型对象,而不是基于接口的服务或控制器。

当请求进入时,您应该使用new创建一个,在Spring的控制之外。您希望将request参数中的值绑定到新的Foo对象中并将其保留。

Spring项目中的每个对象都不需要在bean工厂的控制之下。

通常,您会在方法范围内看到对new的调用。它们通常是没有接口的POJO模型对象。你的病例对我来说似乎就是其中之一。

答案 1 :(得分:0)

 <context:component-scan base-package="service,controllers,dao"></context:component-scan>

在dtd。之后在servlet.xml中编辑它。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

你的web.xml文件中的这个。

对于dao你应该添加一个注释@Repository

可能是我错了..但试试这个......