アプリケーションを開始するとすぐにファクトリでクラス(クラスのインスタンスではない)を登録するアノテーションを実装したいと思います。私はSpring Framework 4.2.7を使用しています。Springでカスタム注釈を実装する
ダッシュボードと複数のウィジェットを備えたシステムを考えてみましょう。ダッシュボードには、現在のユーザーに対して表示するウィジェットのリストを含む設定ファイルがあります。表示されると、設定を読み取り、ウィジェットを作成します。ウィジェットは設定から追加のパラメータを受け取ります。ここで
は、コードのビットは、このことを示す図である:私のウィジェットを実装する場合
public class TestDashboard implements Dashboard {
public void dashboardPreDisplay() {
List<String> widgets = getWidgetList(/* current user in session */);
for (String widgetId : widgets) {
// create instance of DashboardWidget with given ID
DashboardWidget x = widgetFactory.createWidget(widgetId);
}
}
public List<String> getWidgetList(String user) {
// load list of IDs of DashboardWidgets to be displayed for the user
}
@Autowired
private WidgetFactory widgetFactory;
}
@Service
public class WidgetFactory {
public DashboardWidget createWidget(String widgetId) {
// look up Class<> of DashboardWidget with given id in widgetClasses
// construct and initialize DashboardWidget
}
private HashMap<String, Class<?>> widgetClasses;
}
私は、ファクトリクラスでウィジェットを登録するに対処する必要はありません。ウィジェットはcreateWidget-法を与えることによって構築することができるように、アプリケーションは、それが@DashboardWidget
注釈のためのクラスパスをスキャンし、工場を持つクラスを登録する必要が開始すると
@DashboardWidget(id = "uniqueId")
public class DashboardWidgetA implements DashboardWidget {
// ...
}
:理想的には私はちょうどそのようなウィジェットに注釈を付けるだろうウィジェットのID。
私はちょっと混乱しています。私は、Springにはこの動作を達成するためのあらゆるツールが搭載されていると思います。しかし、私はそれをする方法を考えることができません。
私に助言がありますか?
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface DashboardWidget {}
は、その後、あなたのウィジェットのクラスに注釈を付け、それらのSpring Beanにすることができます。
Hey Igor、アプリケーションイベントを私に指摘してくれてありがとう。私はこの答えを受け入れるだろう:) – gdiquest