java - @Autowired 说不推荐现场注入(inject)

标签 java spring-boot javabeans autowired

这个问题在这里已经有了答案:





What exactly is Field Injection and how to avoid it?

(4 个回答)


去年关闭。




谁能告诉我为什么@autowired 说不推荐字段注入(inject),并且 TextWriter 对象“text”也说它不能 Autowiring ,因为有不止一个 textwriter 类型的 bean。 My code.

最佳答案

can anyone tell me why @autowired is saying field injection is not recommended ?


出于设计原因。将 bean 直接注入(inject)字段会使您的依赖项“隐藏”并鼓励不良设计:
  • 类 API(公共(public)/ protected 成员)在它们存在时不会指定它们。
  • 没有反射或 Spring 容器就无法进行单元测试(对我来说最重要的部分)
  • 您可以通过声明潜在的许多注入(inject)字段来结束。这可能会使您的类与其他类具有很强的耦合性,而您却“真正”意识到这一点。

  • 通常,如果字段很少,则应该使用构造函数注入(inject)(从 Spring 4 开始不需要用 @Autowired 注释构造函数),否则应该使用 setter。
    两种方式都没有上面提到的所有缺点。

    关于java - @Autowired 说不推荐现场注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62845494/

    相关文章:

    java - Google App 引擎 - 了解实例如何启动以及需要什么内存 (Java)

    java - 无法在 ArrayList 中找到符号

    java - 如何遍历 Firebase child 的 child 并将他们的 key 添加到列表中?

    javascript - 为什么我的图像不断覆盖自身而不是在 for 循环中显示每个图像?

    docker - 无法通过 URL 访问 Web 应用程序。从 Netscaler 到应用服务器的 SSL 连接失败

    java - SpringBoot : Inject repository into a class defined in service layer

    java - 我如何使用 string#split 将字符串与分隔符 + - */( ) 和空格分开并将它们保留为额外的标记?

    java - 扩展struts 2 "property"数据标签

    java - 如何使 Bean 保持 Activity 状态以供可从过滤器和 EJB 访问的直通 session

    java - 新的 .xhtml 页面不会呈现任何 jsf 标签,但以前创建的页面在同一个项目中仍然可以正常工作