Spring @Autowired 字段 - 哪个访问修饰符是私有的还是包私有的?

2024-01-23

假设我们使用@Autowired对类中的各个字段进行注释,并且我们没有编写也可以设置字段的设置器或构造函数。

问题 - 访问修饰符应该是什么,private or package-private(即没有)?

例如:

public class MyClass {
    @Autowired
    private MyService myService;
}

vs

public class MyClass {
    @Autowired
    MyService myService;
}

在第一种情况下(privatefields) Spring 使用反射来连接字段,即使它没有 setter。

第二种情况(package-privatefields) 允许我们在需要出于测试目的扩展类时访问这些字段(例如,设置模拟)。

因此,这两种情况都可以正常工作,但更推荐哪种情况,特别是在测试方面?


因此,这两种情况都可以正常工作,但更推荐哪种情况,特别是在测试方面?

我认为属性应该是private:

@Autowired
private MyService myService;

因为使用 getter 方法来提供对属性的访问而不是允许其他类直接访问它们总是好的。

出于测试目的,注入mocks of private properties将以与package-private特性。

例如,与Mockito,你可以注入一个模拟private MyService into MyClass像这样:

public class MyClassTest {
    @Mock
    MyService service;
    
    @InjectMocks
    MyClass serv = new MyClass();
    
    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring @Autowired 字段 - 哪个访问修饰符是私有的还是包私有的? 的相关文章

  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • 如果按下 Esc 则中断循环

    我用 JAVA 语言编写了一个程序 它使用 Scanner 类接受来自控制台的输入 现在我想将此功能添加到我的代码中 以便在用户按下 Esc 按钮时存在循环 while 到目前为止 我认为键盘类可以帮助我 但它就像扫描仪一样 我尝试使用事件
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • 如何屏蔽 Protobuf 中的某些字段

    我找不到一种方法来屏蔽 protobuf 结构中的某些字段 我确实阅读了有关 FieldMaskUtil 的内容并尝试了几个示例 但它似乎做了相反的操作 即复制 FieldMask 中提到的字段 这与我想要的不同 这是示例结构和相应的测试代
  • 更改 JTextPane 的大小

    我是Java新手 刚刚在StackOverflow中找到了这段代码 ResizeTextArea https stackoverflow com questions 9370561 enabling scroll bars when jte
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 如何在命令提示符中检查 JAVA_OPTS 值?

    我们的应用程序部署 JBoss 服务器然后抛出错误 PermGen space 然后在 jboss bat 和配置文件中设置 permgen 变量中的 java OPTS JAVA OPTs 中是否有值 assige 如何检查 如何在命令提
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • Netty中连接关闭后重新连接的最佳方法是什么

    简单场景 扩展 SimpleChannelUpstreamHandler 的较低级别的类 A 此类是发送消息和接收响应的主力 系统其他部分可以使用顶级类 B 来发送和接收消息 可以模拟同步和异步 此类创建 ClientBootstrap 设
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • xCode 7.1 中警报的 UITesting

    我正在 xCode 7 1 中编写 UITests 并且在测试警报时遇到问题 在我的情况下允许通知 创建测试时 xCode 会写入以下代码 app alerts U201cAppName U201d Would Like to Send Y
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co
  • java中wav文件转换为字节数组

    我的项目是 阿塞拜疆语音的语音识别 我必须编写一个程序来转换wav文件到字节数组 如何将音频文件转换为byte 基本上如第一个答案中的片段所描述 但不是BufferedInputStream use AudioSystem getAudio
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • Java:基于 Web 的应用程序中的单例类实例

    我在 Web Application 中有这个 Singleton 类 public class MyDAO private static MyDAO instance private MyDAO public static MyDAO g
  • 在多线程环境中,Collections.sort 方法有时会抛出 ConcurrentModificationException。列表没有进行结构性修改

    package CollectionsTS import java util ArrayList import java util Collections import java util HashSet import java util

随机推荐

  • Android:setContentView() == getViewInflate().inflate()?

    我尽我最大的努力想出一种巧妙的方法来清理成堆的东西Blah blah Blah this findViewById R id blah 否则会污染我的小 Activity 的字段和 onCreate 方法 为此 我觉得我不应该对 XML 中
  • 当模块同名时导入 python 包

    我有一个模块blah time我在正常时间和日期操作周围进行一些健全性检查和包装函数 import time def sleep n time sleep n 当我打电话时sleep 它只会抛出最大递归错误 我猜命名空间是错误的 所以我尝试
  • HAVING 子句后面可以有 WHERE 子句吗?

    是否可以在 HAVING 子句后使用 WHERE 子句 我首先想到的是子查询 但我不确定 附 如果答案是肯定的 您能举一些例子吗 不 不在同一个查询中 The where子句位于having和group by 如果您想在分组之前过滤掉记录
  • 如何添加窗口消息事件监听器-Android WebView

    如何添加事件监听器来处理window message事件在一个WebView 我试过这个 webView evaluateJavascript window addEventListener message function e Andro
  • 如何获取 jinja2 模板中所有变量的列表

    我正在尝试获取模板中所有变量和块的列表 我不想创建自己的解析器来查找变量 我尝试使用以下代码片段 from jinja2 import Environment PackageLoader env Environment loader Pac
  • 我应该开发什么最低的 BlackBerry 操作系统?

    我正在为 BlackBerry 移动设备开发 Netflix 应用程序 我需要决定我应该开发的最低操作系统版本 取决于我选择的版本会产生一些设计影响 例如我可以使用哪些浏览器字段类等 归根结底是 我应该支持低于 OS 5 0 的版本吗 我会
  • 如何确定我使用哪个 GC?

    我没有指定任何GC 我认为我的JVM默认没有启用任何GC 当然我知道OpenJDK8默认使用ParallelGC 但我认为它应该可以通过命令行打印 如下所示 java XX PrintFlagsFinal grep Use grep GC
  • GCC循环展开标志真的有效吗?

    在C中 我有一个任务 我必须用以下方法进行乘法 反转 转置 加法等 huge矩阵分配为二维数组 数组的数组 我找到了 gcc 标志 funroll all loops 如果我理解正确 这将自动展开所有循环 而无需程序员做任何努力 我的问题
  • jQuery - 单击链接时将光标置于输入字段中

    我想在单击特定链接后将光标放在输入字段中 我将其用于小型搜索引擎 想象一个输入字段 然后一些链接在输入字段中添加一个字符串 例如 丹麦 英格兰等 现在我需要将光标放置在这样的位置 丹麦 此处 这可能吗 更新 我现在正在使用此代码来替换文本
  • 如何在应用程序运行之间本地检测用户的 iPhone 时钟进度?

    休闲游戏中的一个常见漏洞是人为地提前系统时钟以在游戏中向前跳跃 iOS 设备上的应用程序如何检测此类用户时钟提前 不得涉及网络通信 当时钟提前时 不得假设应用程序已打开 运行或暂停 必须检测时钟前进 仅检测时钟回滚是不够的 理想情况下 该解
  • 有没有办法在 Nuxt.js 中使用 sass 而不是 node-sass (sass-loader 的默认值)?

    我正在尝试在 Nuxt js 中使用 sass 包而不是 node sass 我找到了这样的配置 vue config js module exports css loaderOptions sass implementation requ
  • getUserMedia() 权限被拒绝

    我正在尝试使用测试屏幕共享getUserMedia 我有 Chrome 版本 28 和getUserMedia 屏幕捕获标志已启用 但我仍然收到权限被拒绝的错误 On this 屏幕截图演示 http simpl info screenca
  • 如何以声明方式将禁用/选中等伪布尔属性绑定到布尔值?

    有没有一种简单的方法来绑定属性 例如disabled or checked真 假属性 就像是
  • JavaScript(初级)Kata - 使用函数构建计算器

    我正在解决以下类型 编写一个程序 将 sum product mean 或 sqrt 中的一个作为第一个参数 并使用一系列数字作为进一步的参数 该程序将适当的函数应用于该系列 我已经解决了它 下面的代码 但它体积庞大且效率低下 我想重写它
  • Spark将列转换为存储在字符串中的sql类型

    简单的请求是我需要帮助将列添加到数据帧 但是该列必须为空 其类型来自 spark sql types 并且必须从字符串定义类型 我可能可以用 ifs 或 case 来做到这一点 但我正在寻找更优雅的东西 不需要为 org apache sp
  • Angular 客户端启用 CORS

    CORS 在服务器上运行良好并且按预期工作 我尝试使用 Angular HTTPClient 向服务器的 REST API 发送请求 但收到 CORS 错误 如果服务器上启用了 CORS 为什么会出现此错误 客户端不是应该没问题吗 Cros
  • 如何在 Angular 2 中定义全局变量,以便我可以将它们用于模板中的属性绑定?

    在我的 Angular 2 beta 14 应用程序中 我需要跟踪用户登录状态以便隐藏 显示某些元素 我遇到的问题是属性绑定没有按照我的方式工作 如下所示 我创建了一个类来存储和更新全局变量 应用程序全局 ts import Injecta
  • CMake FIND_LIBRARY:链接到指定库错误

    我已经在我的计算机上安装了 FFTW3 库 并且可以在 usr lib 中找到以下文件 libfftw3f so 3 libfftw3l threads so 3 libfftw3f so 3 3 0 libfftw3l threads s
  • Knockout:无需扩展模型即可选择表行?

    我有通过淘汰赛呈现的下表模板 table class gv thead th Type th th Name th thead tbody tr td td tr tbody table
  • Spring @Autowired 字段 - 哪个访问修饰符是私有的还是包私有的?

    假设我们使用 Autowired对类中的各个字段进行注释 并且我们没有编写也可以设置字段的设置器或构造函数 问题 访问修饰符应该是什么 private or package private 即没有 例如 public class MyCla