Propertiesの代わりにAnnotationを使う
2719 ワード
△今は一知半解だと思いますが、後ではっきりしたら、補足します.
Classクラスでは、すべてのAnnotationを取得するための操作方法が提供されています:
最終的には1つのAnnotationしか得られなかった.これは、その作用範囲が定義されているからです.@Deprescatedのみがプログラム実行時に機能します.
Annotationの役割範囲の種類は、Javaという列挙クラスを問い合わせることができます.lang.annotation.RetentionPolicy、このクラスには3つのAnnotationの範囲が定義されています:1.CLASS:クラスに保存されている2.RUNTIME:運転時に機能する3.SOURCE:ソースコードで機能
Annotationを定義し、その値を取得することを学びます.
出力結果:
Propertiesの代わりに
ほとんどの場合、プロファイルを変更したくないからです.この方法により,構成をプログラムに書き戻すことができ,プログラムから効率的に分離することができる.ここで参考にしたのはservletの開発経験です.
Annotation基本操作
Classクラスでは、すべてのAnnotationを取得するための操作方法が提供されています:
public Annotation[ ] getAnnotations()
例:Annotation取得@SuppressWarnings("serial")
@Deprecated
class Student implements Serializable{
}
public class TestAnnotation {
public static void main(String[] args) {
Class> cls = Student.class;
Annotation an [] = cls.getAnnotations();
for (int i = 0; i < an.length; i++) {
System.out.println(an[i]);
}
}
}
最終的には1つのAnnotationしか得られなかった.これは、その作用範囲が定義されているからです.@Deprescatedのみがプログラム実行時に機能します.
Annotationの役割範囲の種類は、Javaという列挙クラスを問い合わせることができます.lang.annotation.RetentionPolicy、このクラスには3つのAnnotationの範囲が定義されています:1.CLASS:クラスに保存されている2.RUNTIME:運転時に機能する3.SOURCE:ソースコードで機能
Annotationを定義し、その値を取得することを学びます.
@Retention(value = RetentionPolicy.RUNTIME) // Annotation
@interface MyFactory{
public String name() default "mldn"; // ,name mldn
public String val();
}
@MyFactory(val = "hello") // value , Student 。
class Student implements Serializable{
}
public class TestAnnotation {
public static void main(String[] args) {
Class> cls = Student.class;
MyFactory an = cls.getAnnotation(MyFactory.class);
System.out.println(an.name());
System.out.println(an.val());
}
}
出力結果:
mldn
hello
Propertiesの代わりに
ほとんどの場合、プロファイルを変更したくないからです.この方法により,構成をプログラムに書き戻すことができ,プログラムから効率的に分離することができる.ここで参考にしたのはservletの開発経験です.
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyFactoryClass{
public String className();//
}
interface Message {
public void print(String str);
}
class Email implements Message {
@Override
public void print(String str) {
System.out.println("eMail " + str);
}
}
class News implements Message {
@Override
public void print(String str) {
System.out.println("news " + str);
}
}
class factory {
public static Message getInstance(String str) {
try {
return (Message) Class.forName(str).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
@MyFactoryClass (className ="cn.mldn.demo.Email")
public class TestDemo {
public static void main(String[] args) throws Exception{
Class> cls = TestDemo.class;
MyFactoryClass an = cls.getAnnotation(MyFactoryClass.class);
String name = an.className();
Message mes = (Message)factory.getInstance(name) ;
mes.print(" "); }
}