Javaには.NETでいうnamespaceと同じ概念で名前空間を示すパッケージという概念があります。少しでもコードを書いた事がある方ならご存知だと思います。java.lang.Stringではjava.langがパッケージになります。
前に注釈について書きましたが、パッケージにも注釈をつけることが出来ます。以下のようなコードで注釈を取得する事が出来ます。
クラスに注釈をつける場合はクラス宣言の部分に記述するだけですが、パッケージに付ける場合は、まずpackage-info.javaというファイルを生成します。配置する場所は通常のクラスと同じように配置します。a/b/package-info.javaの場合、a.bというパッケージに対するパッケージ情報クラスとなります。
package-info.javaは通常のクラスとは記述方法が全く違います。package宣言とコメントと注釈のみしか記述する事は出来ません。class宣言やinterface宣言は一切記述できません。記述例は以下のようになります。
package-info.javaに読み取りレベルがクラスもしくはランタイム以上の注釈が付けられている場合、package-info.classにコンパイルされます。読み取りレベルがソースの場合はクラスファイルを作る必要がない為コンパイルされません。クラスファイルから読み取る必要がない為です。
Packageクラスから注釈を取得すると、内部でpackage-infoというクラスを取得して、そのクラスから注釈を読み取っています。この機能によってパッケージ注釈が実現されています。パッケージという概念を通常では生成できないクラスによって実現しているということになります。