我的控制器很少,每个控制器都有init()方法。问题是,如何为每个已加载的阶段/控制器调用该方法?下面的代码可以正常工作,但是我不想为每种可能的控制器类编写脚本。
简而言之,我想要这个:
FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource("somefxmlfile.fxml"));
if (loader.getController() instanceof LoginController) {
((LoginController) loader.getController()).init();
}
将被这样的东西代替:
FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource("somefxmlfile.fxml"));
if (loader.getController() instanceof Class<T extends Controller>) {
((Class<T extends Controller>) loader.getController()).init();
}
我在周围弄乱了一段时间,无法编写正确的代码。
我想到两个主意:
Controller
,那么可以给它一个public abstract void init()
-方法,并在扩展Controller
的所有类中实现它@PostConstruct
或@InitMethod
)的方法进行注释,然后在控制器中扫描带有该注释的方法并在构造后执行该方法,来实现此目的。