我想实现一个注释,该注释在应用程序启动后立即向工厂注册类(而不是类的实例)。我正在使用 Spring Framework 4.2.7。
考虑一个具有仪表板和多个小部件的系统。仪表板有一个配置文件,其中包含要为当前用户显示的小部件列表。显示时,它会读取配置并创建小部件。小部件将从配置中接收附加参数。
这是说明这一点的一些代码:
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;
}
在实现我的小部件时,我不想处理向工厂类注册小部件。理想情况下,我会像这样注释小部件:
@DashboardWidget(id = "uniqueId")
public class DashboardWidgetA implements DashboardWidget {
// ...
}
当应用程序启动时,它应该扫描类路径中的@DashboardWidget
注释并将类注册到工厂,以便可以通过为 createWidget 方法提供小部件的 id 来构造小部件。
此刻我有点困惑。我认为 Spring 拥有实现这种行为的所有工具。但我想不出一种方法来做到这一点。
你对我有什么建议吗?