日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

注释嵌套注释_注释,无处不在的注释

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注释嵌套注释_注释,无处不在的注释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注釋嵌套注釋

十年前的2004年 , Java 1.5開始提供注釋。 很難想象沒有此功能的代碼。 實際上,首先引入了注釋,以減輕開發人員編寫繁瑣的樣板代碼的痛苦,并使代碼更具可讀性。 考慮一下J2EE 1.4(沒有可用的注釋)和Java EE5。注釋的采用通過消除所有配置XML大大簡化了Java EE應用程序的開發。 即使在今天,更多的注釋仍被添加到最新版本的Java EE中。 這樣做的目的是減輕開發人員的負擔并提高生產率。 其他技術和框架也廣泛使用它們。



到處都有注釋

讓我們看一個有關注釋如何簡化代碼的示例(摘自我有關JPA Entity Graphs的文章 ):

電影.java

@Entity @Table(name = "MOVIE_ENTITY_GRAPH") @NamedQueries({@NamedQuery(name = "Movie.findAll", query = "SELECT m FROM Movie m") }) @NamedEntityGraphs({@NamedEntityGraph(name = "movieWithActors",attributeNodes = {@NamedAttributeNode("movieActors")}),@NamedEntityGraph(name = "movieWithActorsAndAwards",attributeNodes = {@NamedAttributeNode(value = "movieActors", subgraph = "movieActorsGraph")},subgraphs = {@NamedSubgraph(name = "movieActorsGraph",attributeNodes = {@NamedAttributeNode("movieActorAwards")})}) }) public class Movie implements Serializable {@Idprivate Integer id;@NotNull@Size(max = 50)private String name;@OneToMany@JoinColumn(name = "ID")private Set<MovieActor> movieActors;@OneToMany(fetch = FetchType.EAGER)@JoinColumn(name = "ID")private Set<MovieDirector> movieDirectors;@OneToMany@JoinColumn(name = "ID")private Set<MovieAward> movieAwards; }

等一下! 簡化嗎? 真? 注釋不應該使我的代碼更具可讀性嗎? 此示例具有比實際代碼更多的注釋。 公平地說,我不包括獲取器和設置器。 同樣,某些帶注釋的代碼可以更好地壓縮,但這會使代碼更難閱讀。 當然,這是一個極端的情況。 無論如何,我很高興,因為我獲得了“年度注釋狂”稱號 。 謝謝盧卡斯!

我們非常依賴注釋,以至于最終濫用它們。 有趣的是,在某些情況下,批注引起了他們打算解決的相同問題。

如果?

讓我們像這樣重寫前面的示例:

電影.java

@MovieEntity @FindAll @LoadWithActors @LoadWithActorsAndAwards public class Movie implements Serializable {@Idprivate Integer id;@Nameprivate String name;@MovieActorsprivate Set<MovieActor> movieActors;@MovieDirectorsprivate Set<MovieDirector> movieDirectors;@MovieAwardsprivate Set<MovieAward> movieAwards; }

它肯定看起來更具可讀性。 但是這些注釋不存在。 他們來自哪里?

@LoadWithActors

LoadWithActors.java

@NamedEntityGraph(name = "movieWithActors",attributeNodes = {@NamedAttributeNode("movieActors")} ) public @interface LoadWithActors {}

@LoadWithActorsAndAwards

LoadWithActorsAndAwards.java

@NamedEntityGraph(name = "movieWithActorsAndAwards",attributeNodes = {@NamedAttributeNode(value = "movieActors", subgraph = "movieActorsGraph")},subgraphs = {@NamedSubgraph(name = "movieActorsGraph",attributeNodes = {@NamedAttributeNode("movieActorAwards")})} ) public @interface LoadWithActorsAndAwards {}

其余的依次類推。 你有感覺。 這個想法是將注釋元數據提取并分組到您自己的自定義注釋中。 然后,您的注釋可以用于表示代碼中所有帶注釋的數據,從而更易于理解。 就像Java 8 Lambdas一樣,讀起來就像問題聲明一樣。

只是另一個例子:

WoWBusinessBean.java

@Named @Stateless @TransactionAttribute(TransactionAttributeType.SUPPORTS) @ApplicationPath("/resources") @Path("wowauctions") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class WoWBusinessBean extends Application implements WoWBusiness {}

改寫:

WoWBusinessBean.java

@RestStatelessBean("wowauctions") public class WoWBusinessBean extends Application implements WoWBusiness {}

@RestStatelessBean

RestStatelessBean

@Named @Stateless @TransactionAttribute(TransactionAttributeType.SUPPORTS) @ApplicationPath("/resources") @Path("#{path}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public @interface RestStatelessBean {String value() default "#{path}"; }

通常,我只編寫一次這些注釋來定義POJO的行為,而不再研究它們。 如果我可以為所有無狀態休息服務重用一個注釋,那將有多酷?

另一個不錯的效果是,注釋配置元數據沒有直接綁定在代碼中。 相反,它被抽象為另一個注釋。 在這種情況下,有可能在編譯/運行時中覆蓋或替換這些值。

元注釋

我最初是由David Blevins聽說過這個概念的。 他在Meta Annotations帖子中寫了一篇關于這些想法的很好的文章,甚至寫了一個可能的實現 。

對注釋繼承,抽象和封裝具有簡單的Java SE支持將很方便。 這是所有現有技術處理注釋方式的重大轉變。 只有每個人都開始支持這種行為才有意義。

可能有人會問,我們真的需要此功能嗎? 讓我們嘗試權衡一些利弊:

優點

  • 簡化代碼。
  • 注釋重用。
  • 注釋配置不直接與代碼綁定。 值可以被覆蓋。

缺點

  • 另一層抽象。
  • 自由地創建自定義注釋可以掩蓋真實行為。
  • 可能會遇到某種多重繼承陷阱。

結論

在可預見的將來,這種元注釋不太可能在Java SE中提供。 在Java 9中,大多數焦點都放在Jigsaw中。 除了值類型和泛型專業化之外,我們沒有太多有關Java 10的信息。 實際上,對于純Java SE,所有這些注釋問題都不是真正的問題。

源文件中存在的批注數量正成為有關可讀性和可維護性的問題。 對于Java EE和其他類似技術尤其如此。 考慮一下HTML和CSS。 如果您正在開發HTML頁面,而只需要幾個CSS樣式,則通常將它們內聯到元素中或直接將它們包括在頁面中。 如果開始使用太多樣式,則可以將其提取到外部CSS文件中,然后應用樣式。 我確實認為必須通過采用元注釋或其他方式來完成某些工作。 你還有其他建議嗎? 請分享!

資源資源

不要忘記查看David Blevins關于Meta Annotations的帖子。 他的解釋比我更好,包括技術細節。

也是帶元注釋的JavaOne EJB演示文稿,由David Blevins討論了這些想法。

還有什么比聽大衛·布萊文斯本人更好的呢? Java EE 7,無限可擴展性遇到無限重用 。

翻譯自: https://www.javacodegeeks.com/2014/12/annotations-annotations-everywhere.html

注釋嵌套注釋

總結

以上是生活随笔為你收集整理的注释嵌套注释_注释,无处不在的注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。