假设我有一个java方法,它是用@bean注解的spring。
例子:
public void coco() {
String strCurrMethodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Méthode : \"" + strCurrMethodName +"\"") ;
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {coco();
String strCurrMethodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Méthode : \"" + strCurrMethodName +"\"") ;
};
}
以下是控制台输出:
米é丁字裤:“可可”
米é丁字裤:“lambda$0”
如您所见,我们可以获得非bean方法的方法名。但是对于bean方法,我们不设置方法名,而是设置一个由spring管理的泛型值(我们得到的是“lambda$0”,而不是“commandlinerunner”)。
有人有办法得到springbean的方法名吗?
提前谢谢
2条答案
按热度按时间6jjcrrmo1#
您还可以定义commandlinerunner的实现,但是它将打印“run”而不是commandlinerunner,但是作为previos解决方案的一个优点,“run”将在每次调用commandlinerunner时打印,而不仅仅是在创建bean时打印一次,我认为这更有用
jv4diomz2#
将获取方法名称的语句移到lambda表达式之外:
无法从lambda表达式内部执行的原因是
commandLineRunner
方法在代码运行时早已消失,因为编译器将lambda块转换为隐藏(合成)方法,并用对该方法的引用替换lambdas表达式。