Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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

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
Java 如何通过请求在SpringMVC中实例化类/Bean?_Java_Spring Mvc_Inversion Of Control - Fatal编程技术网

Java 如何通过请求在SpringMVC中实例化类/Bean?

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

首先,我对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;
我很确定我犯了一个基本的错误,因为我对国际奥委会缺乏了解


谢谢

我认为你不应该注射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关键字不是一个好的做法,所以我想避免使用它(如果可能的话)。不,在这种情况下,这正是正确的做法。你所有的豆子都不必受春天的控制。了解规则,了解例外情况。没有思想的教条永远不是好主意。