Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 spring mvc注释@Inject不起作用_Java_Spring Mvc - Fatal编程技术网

Java spring mvc注释@Inject不起作用

Java spring mvc注释@Inject不起作用,java,spring-mvc,Java,Spring Mvc,我的app-servlet.xml中有以下内容 <mvc:annotation-driven /> <context:component-scan base-package="com.merc.myProject.web.controllers"/> <context:component-scan base-package="com.merc.myProject.web.forms"/> 我的控制器看起来像这样 public class SelectDat

我的app-servlet.xml中有以下内容

<mvc:annotation-driven />

<context:component-scan base-package="com.merc.myProject.web.controllers"/>
<context:component-scan base-package="com.merc.myProject.web.forms"/>
我的控制器看起来像这样

public class SelectDatesForm {

    @Inject IUserService userService;
    .....
}
@Controller
public class SelectDates {

   @Inject IUserService userService;

   .....
}
有人请帮忙

查找用
@Component
@Controller
@Service
等注释的类,并将它们配置为bean。如果这些类具有使用
@Inject
@Resource
注入的属性,那么这些类也将被处理

但是,如果您的类一开始没有注释,则不会处理
@Inject
SelectDatesForm
就是这种情况。如果您用
@组件
对此进行注释,则应将其拾取

不过,我在这里要小心一点——表单通常不是SpringBean的好候选对象,因为它们往往是一次性的临时对象。

查找带有
@Component
@Controller
@Service
等注释的类,并将它们配置为bean。如果这些类具有使用
@Inject
@Resource
注入的属性,那么这些类也将被处理

但是,如果您的类一开始没有注释,则不会处理
@Inject
SelectDatesForm
就是这种情况。如果您用
@组件
对此进行注释,则应将其拾取


不过,我在这里要小心一点——表单通常不是SpringBean的好候选对象,因为它们往往是一次性的临时对象。

我猜您的
SelectDatesForm
是使用
new
手动实例化的,而不是从Spring上下文中获取的。在本例中,它不是Springbean,因此不是依赖注入的主题

通常,您不需要将依赖项注入到手动创建的对象中。如果您确实需要这样做,您有几个选项:

  • 将您的
    SelectDatesForm
    声明为原型范围的bean,并从Spring上下文中获取它的新实例,而不是使用
    new
    创建它:

    @Component @Scope("prototype")
    public class SelectDatesForm { ... }
    
    当您需要获取它的新实例时:

    SelectDatesForm newForm = applicationContext.getBean(SelectDatesForm.class);
    
    但是,这种方法将您的代码与Spring的
    ApplicationContext
    相结合

  • 如果您无法控制
    SelectDatesForm
    的实例化(即,它发生在您的代码之外),您可以使用

  • 此外,您还可以手动促进使用
    new
    创建的对象的自动关联:

    SelectDatesForm newForm = new SelectDatesForm();
    applicationContext.getAutowireCapableBeanFactory().autowireBean(newForm);
    

我猜您的
SelectDatesForm
是使用
new
手动实例化的,而不是从Spring上下文中获取的。在本例中,它不是Springbean,因此不是依赖注入的主题

通常,您不需要将依赖项注入到手动创建的对象中。如果您确实需要这样做,您有几个选项:

  • 将您的
    SelectDatesForm
    声明为原型范围的bean,并从Spring上下文中获取它的新实例,而不是使用
    new
    创建它:

    @Component @Scope("prototype")
    public class SelectDatesForm { ... }
    
    当您需要获取它的新实例时:

    SelectDatesForm newForm = applicationContext.getBean(SelectDatesForm.class);
    
    但是,这种方法将您的代码与Spring的
    ApplicationContext
    相结合

  • 如果您无法控制
    SelectDatesForm
    的实例化(即,它发生在您的代码之外),您可以使用

  • 此外,您还可以手动促进使用
    new
    创建的对象的自动关联:

    SelectDatesForm newForm = new SelectDatesForm();
    applicationContext.getAutowireCapableBeanFactory().autowireBean(newForm);
    

感谢您的回复。我试着把@Service和@Component放在一起。一次只有一个,但我得到的是同样的零指针。因为注射没有发生。谢谢你的回复。我试着把@Service和@Component放在一起。一次只有一个,但我得到的是同样的零指针。因为注射没有发生。非常感谢你提供的所有信息和费劲的解释。非常感谢你提供的所有信息和费劲的解释。