首先,我对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缺乏了解,我很确定我犯了一个基本错误......
谢谢!
答案 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
可能是我错了..但试试这个......