2

首先,我对 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 缺乏了解,我犯了一个基本错误......

谢谢!

4

2 回答 2

3

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

当请求进来时,您应该使用 new 创建一个,不受 Spring 的控制。您希望将请求参数中的值绑定到新的 Foo 对象中并将其持久化。

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

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

于 2012-04-26T11:30:40.350 回答
0
 <context:component-scan base-package="service,controllers,dao"></context:component-scan>

edit it in your servlet.xml after dtd.

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

this one in your web.xml file.

for dao u should add an annotation @Repository

may be i am wrong.. but try this one..

于 2012-04-27T06:09:13.357 回答