【发布时间】:2018-03-03 23:29:13
【问题描述】:
我正在使用 Spring 进行 java.util 类注入。
我想知道,您是否在 Spring 的上下文中注册了您的 bean 类,例如 Scanner 或 Random?
我想这个决定取决于你使用它的频率,对吧?
我应该考虑返回 bean 而不是创建新对象时的使用次数是多少?
【问题讨论】:
我正在使用 Spring 进行 java.util 类注入。
我想知道,您是否在 Spring 的上下文中注册了您的 bean 类,例如 Scanner 或 Random?
我想这个决定取决于你使用它的频率,对吧?
我应该考虑返回 bean 而不是创建新对象时的使用次数是多少?
【问题讨论】:
您希望多个 bean 共享一个随机数源吗?如果是这样,那么 bean 需要注入一个随机数生成器 bean。
不过建议在多线程程序中使用ThreadLocalRandom(为了更好的性能),而且在单线程程序中也没有什么坏处,所以一般建议使用它,即Random永远不应该是 Spring bean。
但是,如果您需要使用种子随机数序列对代码进行单元测试,那么代码需要注入一个可以模拟的随机数 bean。
但是请注意,这种随机数 bean 不是 Random 类本身,而是包装器/帮助器 bean。
您是否希望多个 bean 共享一个 Scanner?
这个问题真的只有在命令行程序中才有意义,阅读System.in,在这种情况下答案是肯定的。
【讨论】:
Scanner 作为 bean 共享仍然没有意义。如果您将这种类型的任何东西作为方法参数传递,您的程序将会更加理智。