热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javabean初始化_java–什么时候注入bean实际初始化?

我的代码库中有以下场景:thisbean,whichwillbeinjected,isnotannotatedpublicclassHelperUtil{onlyde

我的代码库中有以下场景:

//this bean, which will be injected,

//is not annotated

public class HelperUtil {

//only default constructor with no args

public void doThis(String _in) {

//...

}

public void doThat() {

//...

}

}

在下面的课程中我们进行注射:

@Named

@Stateless

public class BusinessManager {

@PersistenceContext(unitName = "default")

private EntityManager em;

@Inject

private HelperUtil helperUtil ;

//...

}

Q1:何时调用默认构造函数实际初始化的HelperUtil实例?当注入它的第一个客户端(如BusinessManager)在应用服务器(在我的情况下是JBoss)启动时被实例化(并且那个容器将被容器初始化,因为它被注释为@Stateless)?

Q2:在上面的展示中,HelperUtil是否仍然是单例,只要容器以外没有客户端通过直接调用构造函数而不是通过DI获取实例来请求实例?

问题3:在这种情况下使用DI和@Inject比直接调用构造函数(HelperUtil helper = new HelperUtil();)有什么好处?

解决方法:

这取决于,但你可以控制这些事件来执行一些代码,例如:

如果您需要在应用程序启动时执行bean,则需要将@Startup注释添加到bean中.

如果需要初始化bean而无需访问其他注入资源,则可以使用普通构造函数.

如果在初始化bean时需要执行某些方法,则在方法中使用@PostConstruct注释.

您需要记住,创建取决于bean的范围,在您的情况下,这是一个无状态bean,如果某个客户端注入它并且没有其他可用实例,则将创建bean,如果是singleton则将创建bean只需一次,一般来说,bean将在需要时创建(单例bean初始化直到第一个客户端使用它,或者在启动时使用注释)

编辑:

对于第三个问题,优点是如果您在HelperUtil中使用资源或其他bean,它们将使用适当的值进行初始化,例如,如果您使用实体管理器或帮助程序中的其他bean.如果您的帮助程序只处理静态方法或其他简单实用程序之类的东西,那么您就是正确的,优点是没有,您可以简单地像静态帮助程序类一样进行管理,但如果您需要EE资源,则需要按顺序管理bean获取所有注入和资源

编辑2:

经过多年的编程和在Java和C#Core中使用依赖注入,我可以补充一点:问题3非常开放,使用DI将允许您的代码:

>减少耦合,如果你改变你的构造函数,那么你将不得不去搜索所有新的ObjectModified(oldParams)来添加新的参数

>更容易测试,因为你可以将“假对象”作为依赖项注入,避免加载所有系统并为测试准备状态,例如,如果你想检查一些取决于当前小时的代码,你可以在测试模式下连接一个虚假的提供者,总是提供相同的小时或一些序列

>避免周期性依赖,其中A类依赖于B而B取决于A,通常这更复杂,如

ClasssA -> ClasssB -> ClasssC -> ClasssA

当存在这种依赖关系时,你可以开始一个修改,然后修改使用它的类,依此类推……直到你发现自己修改了同一个类,所以你开始在一个循环中,因为它之间的通信路径你的对象很复杂.

当您使用DI时,可以在早期检测到此循环,因此您可以重新考虑您的体系结构以避免这种生产力黑洞

DI是一个非常强大的工具,可以保持大项目的可维护性,现在存在于很多环境和框架中,因为它非常有用,如果这仍然不能说服你,你可以尝试在Spring boot,PlayFramework,Net Core中启动一个项目, Java EE,Ruby on Rails ……以及其他许多将其作为正常流程并构建中等大小的应用程序,然后在没有DI的情况下尝试

标签:java,jboss,dependency-injection,cdi

来源: https://codeday.me/bug/20190824/1712713.html



推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文介绍了在C#中SByte类型的GetHashCode方法,该方法用于获取当前SByte实例的HashCode。给出了该方法的语法和返回值,并提供了一个示例程序演示了该方法的使用。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有