gpt4 book ai didi

java - Spring Controller 未创建为单例

转载 作者:行者123 更新时间:2023-11-29 07:54:18 25 4
gpt4 key购买 nike

我有一个 Spring Controller ,根据我在调试代码时看到的对象 ID,我认为它被实例化了不止一次。

Controller :

@Controller
@RequestMapping("/services/user")
public class UserController{

private UserService userService;

public void setUserService(UserService userService) {
this.userService = userService;
}

public UserService getUserService() {
return userService;
}

@RequestMapping(method = RequestMethod.POST, value = "/createUser")
public @ResponseBody String createUser(@RequestBody User user) throws UserNotCreatedException {

try {
userService.createUser(user);
return user.getEmail();
} catch (Exception e) {
e.printStackTrace();
throw new UserNotCreatedException("User not created");

}
}

Spring配置文件:

  <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<!-- Scans the classpath of this application for @Components to deploy as
beans -->
<context:component-scan base-package="com.xyz.controller" />

<context:annotation-config />

<bean id="userController" class="com.xyz.UserController">
<property name="userService" ref="userService" />
</bean>

<bean id="userService" class="com.xyz.UserServiceImpl">
<property name="userDao" ref="userDaoMysql" />
</bean>

<bean id="userDaoMysql" class="com.xyz.UserDaoImpl" >
<property name="dataSource" ref="dataSource"></property>
<property name="template" ref="jdbcTemplate"></property>
</bean>
</beans>

当我通过 UserController 发出请求时意识到 userService 为空时,我注意到了这个问题。然而;当我放置断点时,我看到 userService 确实在另一个 UserController 实例中设置。

最佳答案

该线程中的其他评论没有考虑到 UserController 类的包。提供的 Spring 配置将 com.xyz.controller 上的组件扫描初始化为基础包。 UserController 类看起来像是在 com.xyz 中的这个之外,因此不会被组件扫描拾取(除非那是错字@user269091 - 这可能成为你的问题!)。

我应该指出,我不明白为什么你的 Controller 不在你的 controller 包中。将 Controller 移到那里是最干净的,在 private UserService userService; 行上方添加 @Autowired 并删除 Spring 中的手动 UserController 定义配置,这样组件扫描就会自动拾取你的 bean 并连接 UserService

话虽如此,我真的不明白为什么您展示的内容会有问题。您的代码中是否有 new UserController()? Spring还有其他配置吗?

关于java - Spring Controller 未创建为单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com