注释嵌套注释_注释梦Night

注释嵌套注释



@XmlElementWrapper(name="orders")
@XmlJavaTypeAdapter(OrderJaxbAdapter.class)
@XmlElements({@XmlElement(name="order_2",type=Order2.class),@XmlElement(name="old_order",type=OldOrder.class)
})
@JsonIgnore
@JsonProperty
@NotNull
@ManyToMany
@Fetch(FetchMode.SUBSELECT)
@JoinTable(name = "customer_order",joinColumns = {@JoinColumn(name = "customer_id", referencedColumnName = "id")},inverseJoinColumns = {@JoinColumn(name = "order_id", referencedColumnName = "id")}
)
private List orders;

等待。 什么? 这真的是我们所要达成的目标吗? 我什至看不到这个膨胀下的该死的财产。 这怎么发生的? 是的-我们不得不以某种方式摆脱旧的xml配置恐怖。 但是这个? 这甚至更糟。 此类应该是一堆具有许多特性的真棒pojo。 简洁明了,易于阅读。 作为本案例的读者,我对数据库表如何将客户加入订单完全不感兴趣。 我对它的序列化都不感兴趣。 这只是实现细节。 阅读此课程,我生活在对象世界中,我想知道对象具有哪些数据和行为。 不多不少。 我暂时不在乎列名,fetchtypes或json序列化。 而且我不想为了更改表名而读取,更改或重新编译此类。 我也不想添加另一个用于将该实体存储在mongoDB中的注释。 实体不应对这些细节负责。 我们不仅在这里违反了单一责任原则,还在做责任方。

好吧好吧,足够的愤怒。 我们如何处理这个问题? 一些实体将实体复制到具有不同注释目的的各个层。 他们使用自动映射器(如Dozer)将实体映射到与下一层相关的实体。 有些人甚至自己写了那个映射。 但这绝不是解决方案。 它只是将一种代码气味替换为另一种:重复。

因此,请专注于不会强迫您使代码混乱的框架。 jOOQ是将数据库记录映射到没有注释的实体的不错的解决方案。 另外,hibernate允许您以XML定义映射。

专用场注入

@Inject
private MyService myService

这是很经常使用的,尽管它甚至是不可能的。 myService字段是私有的,因此无法从类外部访问。 然而,这是有可能的,人们会这样做。 实际上,这是一个hack。 DI框架使用setAccessible(true)进行反射来设置字段。 您不想在您的代码中被黑客入侵,对吗? 让我们来看看替代方案:

二传手注射

好吧,至少它比私有域注入更好,因为它使用公共方法而不是侵入私有域。 但是,仍然要问自己:“这个阶级是否应该在没有注入价值的情况下生活?” 因为如果不是这样,就没有理由在没有MyService实例的情况下构造该类。 您想在类级别和构造函数内部而不是在框架级别实现此约束。

构造函数注入

这通常是要走的路。 它可以让你

  • 使字段不变(通常无需更改)。
  • 实现约束,即在正确的位置没有给定的MyService ,该类不可实例化。

当然,这意味着您不能通过注解进行注入。 但是为什么要呢? 该类不需要知道,它是否通过DI容器或工厂类进行注入。 它应该对此一无所知。 没有@Autowired,没有@Qualifier。 它只需要知道自己的行为即可。 其他所有内容都应在课堂之外处理。

可以使用配置类或文件进行实际注入。

DI容器是有用的工具,可帮助您将类连接在一起。 为此,请使用它,但不要让它支配您的代码。 Bob叔叔写了一篇很棒的文章 ,他在其中解释了如何使用DI-Frameworks而不要求他们指定您的代码。

UnitTests中的@RunWith(SpringJUnit4ClassRunner.class)

为什么在单元测试中需要此功能? 因为它是由您的IDE /应用程序模板自动生成的? 没有! 您想测试一个类的行为,它孤立地存在于单元测试中。 如果DI-Conainer正在相应地注入字段,则不会。 只需将自己注入设置方法即可。 无需DI容器。 顺便说一下,这个testrunner所做的只是这三行代码。

private TestContextManager testContextManager;
//..
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);

它们不值得阻塞您唯一的TestRunner插槽。 您想免费使用它进行参数化@RunWith(JUnitParamsRunner.class)或并发@RunWith(ConcurrentJunitRunner.class)测试。

@Override

确实,我的IDE已经知道我是否正确覆盖了方法。 对我来说,这只是混乱。

@SuppressWarnings

…甚至不让我开始

tl; dr

这些天来,注释变得比有害有用。 我们应该回到pojos上,并专注于保持我们的代码尽可能整洁和与框架无关,以使其更具可读性和可重用性。 不要让框架支配您的代码库,因为它们应该是可交换的工具。 当心一个班级应该知道什么,什么不知道。 一些注释有用,而大多数却没有。

@DevNull({@SuppressWarnings@Autowired, @Inject, @Override,  @XmlElementWrapper,@XmlJavaTypeAdapter,@XmlElement,@JsonIgnore,@JsonProperty,@ManyToMany,@Fetch,@JoinTable
})

参考: “ 成为更好的开发者”博客上来自我们JCG合作伙伴 Gregor Riegler 的注释梦 m。

翻译自: https://www.javacodegeeks.com/2014/01/an-annotation-nightmare.html

注释嵌套注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】国家开放大学2021春2312旅行社经营管理题目

试卷代号:2312 2021年春季学期期末统一考试 旅行社经营管理 试题 2021年7月 一、单项选择题(下列各题选项中只有一个答案是最准确的,请将其序号埴入括号中,每小题2分.共20分) 1.旅行社的( )是旅行社经营的基础&#xf…

Latex快速入门系列 -- 在TexStudio中正确插入参考文献的基本操作

目录 1 操作流程2 四种基本的文献格式比较3 文献数据库.bib的编写 1. 操作流程 1.1 创建文章主文件。Ctrl N 新建一个文件,Ctrl S 手动保存,保持文件后缀名.tex。得到一个.tex文件:文章名.tex,该文件用来编写你的文章的具体内…

【渝粤题库】国家开放大学2021春2509学前教育学题目

试卷代号:2509 2021年春季学期期末统一考试 学前教育学 试题 2021年7月 一、选择题(每小题2分,共20分) 1.瑞士教育家裴斯泰洛齐的代表作是( )。 A.《大教学论》 B.《世界图解》 C.《理想国》 D.《林哈德与葛笃德》 2.学前教育阻碍…

MongoDB索引策略和索引类型

1. MongoDB索引策略和索引类型–简介 MongoDB是一个开放源代码,面向文档的跨平台数据库,它使用C 开发,并且是最流行和使用最广泛的NoSQL类型数据库之一。 它可在具有键-值对的类JSON文档的顶部运行,其键值对在每个文档中都无法定义…

【渝粤题库】国家开放大学2021春2634推销策略与艺术题目

试卷代号:2634 2021年春季学期期末统一考试 推销策略与艺术 试题 2021年7月 一、单项选择(在每小题的4个选项中选出一个最优的,将其序号填入题后括号内。每小题2分,共20分) 1.在现代推销中,推销人员应该持有…

prove, verify, bear out, demonstrate, confirm, validate, testify, certify 的区别

1. prove prove “证明”,证明(某事属实), 普通用词,泛指有充分的、可靠的事实证明某一观点或结论是正确的。可用作及物动词,后接宾语或宾语从句。 Galileo proved the law of falling objects to the world from the…

zeal刷新不出来_推进重涂市场标准化,立邦率先推出刷新服务“八大验收标准”...

点击蓝字【立邦中国】,设置星标关注。7月,立邦刷新服务率先在墙面重涂行业提出突破性的“八大验收标准”,根据不同的涂刷工艺来采用定制化的验收标准,更进一步推动重涂市场的标准化和规范化。自2011年推出立邦刷新服务至今&#x…

【渝粤题库】国家开放大学2021春2732土地利用规划题目

试卷代号:2732 2021年春季学期期末统一考试 土地利用规划 试题 2021年7月 一、单选题(每小题3分,10小题,共30分) 1.从生态角度看,土地不具有( )功能。 A.支撑 B.养育 C.净化 D.生产 2.土壤腐殖质的热容量比…

初学者指南:如何为Red Hat Process Automation Manager配置电子邮件服务任务

最近,我一直在更新我的免费在线研讨会 ,特别是基于JBoss BPM Suite的系列研讨会 ,以便您可以开始使用较新的Red Hat Process Automation Manager 。 在本文中,我将分享我在自动化项目中尝试使用电子邮件通知时偶然发现的内容。 …

【渝粤题库】国家开放大学2021春2786初级西方经济学题目

试卷代号:2786 2021年春季学期期末统一考试 初级西方经济学 试题 2021年7月 一、单项选择题(在下列各题的备选答案中选择一个正确的,并将其序号字母填入题后的括号里。每题2分,共30分) 1.如果某种商品缺乏弹性&#xf…

TDMA 时分多路复用

多路复用 一、什么是多路复用技术? 多路复用技术是把若干个低速信道组成一个高速信道的技术,可以提高数据链路利用率,从而使一条高速的主干链路同时为多条低速的接入链路提供服务,即使网络主干链路可同时运载大量的语音和数据传…

asp 取数据 计算_ASP.NET Core 简介

.NET Core 是 .NET Framework 的新一代版本,是微软开发的第一个具有跨平台 ( Windows、Mac OSX 、Linux ) 能力的应用程序开发框http://ASP.NET Core 是 Microsoft 新开发的,基于 .NET Core 的 Web 开发框架http://ASP.NET Core 是对 http://ASP.NET 的重…

【渝粤题库】国家开放大学2021春3922汽车运用基础题目

试卷代号:3922 2021年春季学期期末统一考试 汽车运用基础 试题 2021年7月 一、单项选择题(下列各题的备选答案中,只有一个选项是正确的,请把正确答案的序号填写在括号内。15小题,每小题2分,共30分&#xff…

java字节码_掌握Java字节码

java字节码嘿! Happy Advent:D我是ZeroTurnaround的技术布道者Simon Maple( sjmaple) 。 您知道, JRebel伙计们! 由于编写了类似JRebel的产品,该产品与字节码进行交互的结果比您想像中的要多,因…

自由空间激光通信

一、空间激光通信系统 空间激光通信系统是指以激光光波作为载波,大气作为传输介质的光通信系统。自由空间激光通信结合了光纤通信与微波通信的优点,既具有大通信容量、高速传输的优点,又不需要铺设光纤,因此各技术强国在空间激光…

【渝粤题库】国家开放大学2021春3980管理心理学题目

试卷代号:3980 202 1年春季学期期末统一考试 管理心理学 试题 2021年7月 一、单项选择题(每小题2分,共20分。在备选答案中选择一个正确答案,并把正确的选项填入括号中) 1.管理心理学的早期发展同西方工业心理学的兴起分…

icom对讲机写频线定义_小米对讲机Lite体验:小米全新5公里无网络免费通话神器...

沟通,或者可以简单地把它说成是一种信息的传递。它对于世间的生灵来说,都很重要!尤其是对于人类,更为重要!由古至今,人们为了可以更好地进行信息的传递,想出了各种各样的办法,比如古…

Spring Boot应用程序的“本地服务”

我有机会尝试使用Knative的 Serving功能来部署Spring Boot应用程序,而这篇文章只是记录了示例和我采用的方法。 我对Knative的内部知识还不够了解,无法就此方法是否比基于部署 服务 基于入口的方法更好。 一项很棒的功能是Knative Serving中的自动缩放…

【渝粤题库】广东开放大学 Linux操作系统 形成性考核

​ 题目: C语言头文件一般以什么名称结尾? 题目: 以下哪个不属于操作系统? 题目: 以下描述正确的是? 题目: 使用gcc编译后的目标文件一般以什么名称结尾? 题目: 进程通…

一文读懂:常见低通、高通、带通三种滤波器的工作原理

滤波器 滤波器是对波进行过滤的器件,是一种让某一频带内信号通过,同时又阻止这一频带外信号通过的电路。 滤波器主要有低通滤波器、高通滤波器和带通滤波器三种,按照电路工作原理又可分为无源和有源滤波器两大类。今天,小编主要…