Java spring mvc注释@Inject不起作用
我的app-servlet.xml中有以下内容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
<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放在一起。一次只有一个,但我得到的是同样的零指针。因为注射没有发生。非常感谢你提供的所有信息和费劲的解释。非常感谢你提供的所有信息和费劲的解释。