当前位置: 首页 > news >正文

濮阳市网站建设_网站建设公司_加载速度优化_seo优化

网站建设方式优化,手机网站大全网址大全,山东平台网站建设设计,惠州市网站设计公司依赖注入是Java#xff08;以及许多其他编程语言#xff09;中广泛使用的软件设计模式#xff0c;用于实现控制反转 。 它提高了可重用性#xff0c;可测试性#xff0c;可维护性#xff0c;并有助于构建松耦合的组件。 如今#xff0c;依赖注入是将Java对象连接在一起的… 依赖注入是Java以及许多其他编程语言中广泛使用的软件设计模式用于实现控制反转 。 它提高了可重用性可测试性可维护性并有助于构建松耦合的组件。 如今依赖注入是将Java对象连接在一起的事实上的标准。 诸如Spring或Guice之类的各种Java框架可以帮助实现依赖注入。 从Java EE 6开始还有一个正式的Java EE API用于依赖关系注入 上下文和依赖关系注入 CDI。 我们使用依赖注入来注入服务存储库与域相关的组件资源或配置值。 但是以我的经验依赖注入也可以用来注入域对象这常常被忽略。 一个典型的例子是在Java许多应用程序中获取当前登录用户的方式。 通常我们最终会向登录用户询问某些组件或服务。 此代码看起来可能类似于以下代码片段 public class SomeComponent {Injectprivate AuthService authService;public void workWithUser() {User loggedInUser  authService.getLoggedInUser();// do something with loggedInUser} } 此处将AuthService实例注入SomeComponent。 SomeComponent的方法现在使用AuthService对象来获取已登录用户的实例。 但是除了注入AuthService之外我们还可以将登录用户直接注入SomeComponent中。 可能看起来像这样 public class SomeComponent {InjectLoggedInUserprivate User loggedInUser;public void workWithUser() {// do something with loggedInUser} } 在这里User对象直接注入SomeComponent中不需要AuthService实例。 如果存在多个类型为User的托管bean则使用自定义批注LoggedInUser来避免冲突。 Spring和CDI都可以进行这种类型的注入并且配置实际上非常相似。 在下一节中我们将看到如何使用Spring注入域对象。 在此之后我将描述使用CDI进行相同操作所需的更改。 使用Spring进行域对象注入 要注入上面示例中所示的域对象我们只需要做两个小步骤。 首先我们必须创建LoggedInUser批注 import java.lang.annotation.*; import org.springframework.beans.factory.annotation.Qualifier;Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Qualifier public interface LoggedInUser {} 请注意Qualifier批注它将LoggedInUser变成自定义限定符。 如果有多个相同类型的bean可用Spring会使用限定符来避免冲突。 接下来我们必须在我们的Spring配置中添加一个bean定义。 我们在这里使用Spring的Java配置也可以使用xml配置来完成。 Configuration public class Application {BeanLoggedInUserScope(value  WebApplicationContext.SCOPE_SESSION, proxyMode  ScopedProxyMode.TARGET_CLASS)public User getLoggedInUser() {// retrieve and return user object from server/database/session} } 在getLoggedInUser内部我们必须检索并返回当前登录用户的实例例如通过从第一个代码片段中询问AuthService。 使用Scope我们可以控制返回对象的范围。 最佳范围取决于域对象并且在不同的域对象之间可能有所不同。 对于代表登录用户的User对象 请求或会话范围将是有效的选择。 通过用LoggedInUser注释getLoggedInUser我们告诉Spring应该在每次注入用户类型为LoggedInUser的bean时使用此bean定义。 现在我们可以将登录用户注入其他组件 Component public class SomeComponent {AutowiredLoggedInUserprivate User loggedInUser;... } 在这个简单的示例中实际上不需要限定符注释。 只要只有一个类型为User的bean定义可用Spring可以按类型注入已登录的用户。 但是在注入域对象时很容易发生您具有相同类型的多个bean定义。 因此使用附加的限定符注释是一个好主意。 限定词凭借其描述性名称也可以充当文档如果命名正确。 简化Spring bean定义 注入许多域对象时最终有可能在bean配置中一遍又一遍地重复作用域和代理配置。 在这种情况下可以在自定义注释上使用Spring注释。 因此我们可以简单地创建自己的SessionScopedBean批注以代替Bean和Scope Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Bean Scope(value  WebApplicationContext.SCOPE_SESSION, proxyMode  ScopedProxyMode.TARGET_CLASS) public interface SessionScopedBean {} 现在我们可以简化bean的定义 Configuration public class Application {LoggedInUserSessionScopedBeanpublic User getLoggedInUser() {...} }Java EE和CDI CDI的配置几乎相同。 唯一的区别是我们必须用javax.inject和CDI注释替换Spring注释。 因此LoggedInUser应该使用javax.inject.Qualifier进行注释而不是org.springframework.beans.factory.annotation.Qualifier进行注释请参阅 使用Qualifiers 。 Spring bean定义可以用CDI Producer方法代替。 可以使用适当的CDI范围注释代替Scope。 在注入点可以将Spring的Autowired替换为Inject。 请注意Spring还支持javax.inject注释。 如果将javax.inject依赖项添加到Spring项目中则还可以使用Inject和 javax.inject.Qualifier。 这样做实际上是一个好主意因为它可以减少Java代码中的Spring依赖关系。 结论 我们可以使用自定义注释和作用域bean将域对象注入到其他组件中。 注入域对象可以使您的代码更易于阅读并且可以导致更清晰的依赖关系。 如果仅注入AuthService来获取登录用户则实际上取决于登录用户而不是AuthService。 不利的一面是它使您的代码更牢固地依赖于依赖注入框架该框架必须为您管理bean范围。 如果要保持在Dependency Injection容器之外使用类的能力则可能会遇到问题。 哪种类型的域对象适合注入在很大程度上取决于您正在处理的应用程序。 好的候选对象是您经常使用的领域对象它不依赖于任何方法或请求参数。 当前登录的用户是可能通常适合注入的对象。 您可以在GitHub上找到所示示例的源代码。 翻译自: https://www.javacodegeeks.com/2014/10/injecting-domain-objects-instead-of-infrastructure-components.html
http://www.ihoyoo.com/news/3815.html

相关文章:

  • wordpress 多站点 无法访问wordpress 积分集成
  • 做旅行的网站wordpress 能商用
  • 做视频网站需要哪些条件提卡网站怎么做
  • 浅谈高校网站群的建设公益主机
  • 自己免费怎么做网站wordpress还原明文密码
  • 商城网站系统哈尔滨建设网证照查询
  • 网站建设论文提纲温州市住房和城乡建设厅网站
  • 北京高端网站建设公司浩森宇特企业号码查询系统
  • 河南网站seo优化福州做网站建设服务商
  • 北京模板网站建设费用网站建设移动端
  • 能自己做二次元人物的网站友情链接批量查询
  • 建筑网站管桩进场验收规范购物网站主页模板
  • 动态做网站上海网站se0优化
  • 建设网站主机免费的怎么下载中文 wordpress
  • 今天的新闻大事10条上海网优化seo公司
  • 小学校园门户网站建设北京建设执业注册中心网站
  • 旅游电子商务网站建设规划中国城乡住房和城乡建设部网站
  • 学生做兼职去哪个网站承德网站制作
  • 网站建设一定要备案吗好123上网主页
  • 做快递单的网站会不会是骗人的wdcp自动备份wordpress
  • 百度外卖网站建设与维护方法学习做网站可以吗
  • 关于网站备案及管理的授权书网页设计实验报告的结果分析怎么写
  • 05网寒假作业长沙网站优化联系方式
  • 苏州园区一站式服务中心国内最新新闻10条
  • 怎么做网站讯息产品彩页模板
  • 做网站的图片大小是多少263云通信企业邮箱
  • 宁夏做网站的室内装修设计用什么软件制图
  • 百度新网站提交入口wordpress user_register
  • 网站运营和维护百度生成手机网站
  • 二手网站排名网站设计的公司运营接单