- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想尝试不同类型的 bean 作用域。所以我写了一个测试环境,它应该生成一个随机数,这样我就可以看到一个 bean 是否发生了变化。我的测试设置不起作用,我无法解释我发现了什么。
我正在使用 Spring Boot 2.13 和 Spring Framework 5.15。
以下设置:
主类:
package domain.webcreator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebcreatorApplication {
public static void main(String[] args) {
SpringApplication.run(WebcreatorApplication.class, args);
}
}
bean 类:
package domain.webcreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Random;
@Configuration
public class Beans {
@Bean
public Random randomGenerator() {
return new Random();
}
}
作用域类:
package domain.webcreator;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.util.Random;
@Service
@Scope("singleton")
public class Scoper {
private Random rand;
public Scoper(Random rand) {
this.rand = rand;
}
public int getNumber(int max) {
return rand.nextInt(max);
}
}
索引 Controller
package domain.webcreator.controller;
import domain.webcreator.Scoper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController {
@GetMapping("/")
@ResponseBody
@Autowired
public String indexAction(Scoper scoper) {
return String.valueOf(scoper.getNumber(50));
}
}
我的问题是,我在调用 scoper.getNumber(50) 时收到 NPE。这很奇怪,因为在调试时,会生成一个 Random bean 并将其传递给作用域构造函数。稍后,在 Controller 中,rand 属性为空。
我做错了什么?
最佳答案
您正在尝试将 @Autowired
应用于随机方法,这不是 Spring 的工作方式。 Controller 方法参数用于特定于该 HTTP 请求的信息,而不是一般依赖项,因此 Spring 试图创建一个与请求关联的新 Scoper
——但它没有任何传入值在填写请求中。(我真的很惊讶你没有收到关于没有默认构造函数的错误。)
相反,在构造函数中传递您的 Scoper
。
@RestController
public class IndexController {
private final Scoper scoper;
public IndexController(Scoper scoper) {
this.scoper = scoper;
}
@GetMapping("/")
public String indexAction(Scoper scoper) {
return String.valueOf(scoper.getNumber(50));
}
}
一些注意事项:
@RestController
比重复 @ResponseBody
更可取,除非您有混合 Controller 类。关于java - Spring Autowiring "forgot"关于依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200986/
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我有一个具有多种语言的 Magento 网站。我已经设置了语言包,网站上的所有内容似乎都能正确翻译。此外,交易电子邮件均以正确的语言发送,“忘记密码”电子邮件除外,该电子邮件始终以德语发送。这是我所做
我使用 SFHFKeychainUtils 有一段时间了。在我上次更新 AppStore 时,它突然“忘记”了我的用户密码。这意味着,当为相同的用户名和服务调用 getPasswordForUse
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Forgot Password: what is the best method of implementing a
这个问题在这里已经有了答案: Is this fire and forget approach correct? (2 个答案) Fire and forget without async void
我想尝试不同类型的 bean 作用域。所以我写了一个测试环境,它应该生成一个随机数,这样我就可以看到一个 bean 是否发生了变化。我的测试设置不起作用,我无法解释我发现了什么。 我正在使用 Spri
我有 md5 格式的密码数据库条目,但是当用户使用“忘记密码”时,我该如何给他/她所需的密码? 最佳答案 你不能从 MD5 散列中做到这一点;你也不应该能够。密码恢复应该是棘手的。 通常的过程是将密码
当你运行 perl -e "Bla->new" ,你会得到这个众所周知的错误: Can't locate object method "new" via package "Bla" (perhaps
我们在门户中使用 Keycloak 12 进行身份验证,并且有两种不同类型的用户: 内部用户(从我们的内部 LDAP 读取) 外部用户(存储在 Keycloak 中但未与 LDAP 同步) 我们现在想
在登录 demos ,每个示例都有说明“要关闭登录表单提交非空用户名和密码”的页脚文本。我想复制这个,但添加的不仅仅是文本。我可以打电话LoginI18n#setAdditionalInformati
这是我遇到的错误。 Warning: React.createElement: type is invalid -- expected a string (for built-in component
在从Devise切换到直接使用的过程中Warden . 我怎样才能实现 Devise 开箱即用的“忘记密码”功能? 是否有 gem 可以将此添加到 Warden 上? 附言。不使用 Devise 的原
我正在尝试将忘记密码字段与登录页面放在一起,但如果用户未注册(并且不在应用程序数据库中),则它会重定向到原始设计的忘记密码页面并出现错误 (http://localhost:3000/用户/密码)。如
我正在使用 ASW Cognito 对用户进行身份验证。 Cognito 有一个记录良好的流程来处理忘记密码的用户。 如何处理忘记用户名的用户?是否有内置流程让用户输入他们的电子邮件或电话号码,然后接
我正在使用具有 Azure AAD B2C 配置的 Web 应用程序来进行 IIS 中托管的身份验证。 我已创建注册策略、登录策略和密码重置策略。我也在 Azure Active Directory
我正在尝试实现一个包含“忘记密码?”的登录页面。按钮打开一个表单,然后允许用户提交电子邮件,同时也是用户名,如果 Cognito 中存在该条目,则应启动重置密码过程。 到目前为止,我遇到的问题之一是我
我想知道在网站上创建忘记密码功能的最佳方法是什么。我见过不少这样的东西,这里有一些或它们的组合: 密码问题/答案(1 个或多个) 发送包含新密码的电子邮件 在屏幕上输入新密码 通过电子邮件确认:必须点
我是 Azure AD B2C 的新手,因为 Azure B2C 提供了各种策略和用户流程,例如登录注册等。我们使用的是相同的。由于某种原因,我们考虑使用图形 API(更改密码)来实现忘记密码功能,在
如何从 Azure AD B2C 登录的登录页面中删除“忘记密码”链接。 谢谢。 最佳答案 在技术资料的元数据部分添加: none 选项: AfterLabel (Default) After
如何从 Azure AD B2C 登录的登录页面中删除“忘记密码”链接。 谢谢。 最佳答案 在技术资料的元数据部分添加: none 选项: AfterLabel (Default) After
我是一名优秀的程序员,十分优秀!