Java 如何通过请求在SpringMVC中实例化类/Bean?
首先,我对Springframwork还很陌生 假设我在Spring MVC中有一个控制器:Java 如何通过请求在SpringMVC中实例化类/Bean?,java,spring-mvc,inversion-of-control,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) publ
@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;
我很确定我犯了一个基本的错误,因为我对国际奥委会缺乏了解
谢谢 我认为你不应该注射Foo。在我看来,它像一个模型对象,而不是一个基于接口的服务或控制器 当请求传入时,您应该在Spring的控制之外使用new创建一个。您希望将请求参数中的值绑定到新的Foo对象中并将其持久化 Spring项目中的每个对象都不需要受bean工厂的控制 通常,您会看到对方法范围内对象的new调用。它们通常是没有接口的POJO模型对象。我觉得你的案子就是其中之一。
<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>
org.springframework.web.context.ContextLoaderListener
这是您的web.xml文件中的一个
对于dao,您应该添加注释@Repository
也许我错了。。但是试试这个。Foo有
@Service
注释吗?因为你有两个自动连接的注入,你应该注释掉其中的一个或两个,以缩小错误范围。胡乱猜测:它可能是foo(更简单的项目)。foo是一个POJO,而不是一个服务,正如你所建议的那样。我以前就知道。但是我经常读到,使用new关键字不是一个好的做法,所以我想避免使用它(如果可能的话)。不,在这种情况下,这正是正确的做法。你所有的豆子都不必受春天的控制。了解规则,了解例外情况。没有思想的教条永远不是好主意。