gpt4 book ai didi

java - Spring Boot 与 SessionScope 的问题

转载 作者:行者123 更新时间:2023-12-01 17:21:18 25 4
gpt4 key购买 nike

我使用 MyBatis 运行 SpringBoot 应用程序。

我有一个像这样的 MyBatis 映射器:

    @Component
@Mapper
public interface AccountMapper {
@Insert("insert into dc_account(identification,nickname,username,password) values (#{identification},#{nickname},#{username},#{password})")
public int insert(Account account);
@Update("update dc_account set identification=#{identification},nickname=#{nickname},username=#{username},password=#{password}")
public int update(Account account);

@Select("select * from dc_account where username=#{username} and password=#{password}")
@Results(
id = "account",
value = {
@Result(property = "identification", column = "identification"),
@Result(property = "nickname", column = "nickname"),
@Result(property = "username", column = "username"),
@Result(property = "password", column = "password")
}
)
Account select(Account account);
}

帐户类别是:

@Component
@SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Account{
@Value("1")
int identification;
@Value("1")
String nickname;
@Value("1")
String username;
@Value("1")
String password;
//getter and setter
}

Controller :

@Autowired
AccountMapper accountMapper;
@Autowired
Account account;
//.......
@RequestMapping("/login")
Account login(
@RequestParam("username")String username,
@RequestParam("password")String password){
account.setUsername(username);
account.setPassword(password);
accountMapper.select(account);
return account;
}

当我输入网址 localhost:8080/login?username=1&password=1

报告enter image description here

如果我删除 class Account@SessionScope 注释,一切都会正常。

我不知道哪里出了问题......有人可以给一些建议吗?

最佳答案

经过一下午的寻找。

这是我的想法:

当我将 Controller 更改为下面的代码时,一切仍然正常。

所以mybatis没有任何问题

@RequestMapping("/login")
Account login(
@RequestParam("username")String username,
@RequestParam("password")String password){
account.setUsername(username);
account.setPassword(password);
return accountMapper.select(account);
//return account;
}

但是我将代码稍微更改为


@RequestMapping("/login")
Account login(
@RequestParam("username")String username,
@RequestParam("password")String password){
account.setUsername(username);
account.setPassword(password);
//return accountMapper.select(account);
return account;
}

然后它会报告我在问题中提到的相同错误消息。

我认为@SessionScope的bean(即Account类)已经由SpringBoot的ioc容器管理,

如果我从该 Controller 方法返回相同的 session 范围 bean,

这两个 bean 指向同一件事,导致某种自引用。

关于java - Spring Boot 与 SessionScope 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61284552/

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