【问题标题】:Invoke method using spring SPEL with property使用带有属性的 spring SPEL 调用方法
【发布时间】:2021-05-26 04:30:06
【问题描述】:

是否可以在赋值时使用属性值来调用方法?

例如,我知道我可以这样做:

@Value("${name}")
private String name; // will have the value of the `name` property

我想知道是否可以这样做:

@Value("#{myMethod(${name})}")
private String myModifiedVariable; // will have the result of invoking myMethod

【问题讨论】:

  • @Deadpool 没有特别的原因。只是想简化我很好奇的属性是否可能
  • 您可以使用@Bean 注释该方法并将其用作普通属性。
  • @dan1st 哦,有趣,即使它是在同一个类中定义的?
  • 如果您将其用作 bean,则同一类中的方法可能会导致问题,因为此时该类尚未完全加载。

标签: java spring-boot spring-el


【解决方案1】:

经过我的研究和一些测试,我发现这篇文章中有一个方法Spring EL method invocation,但是mybean应该是一个字符串bean

@Value("#{mybean.myMethod('${name}')}")
private String myModifiedVariable;

如果要调用现有类中的方法,则使用同一类的spring bean名称

 @Configuration  // or any sterotype annoations
 public class TestConfig {

       @Value("#{testConfig.myMethod('${name}')}")
       private String myModifiedVariable;

       public String getValue(String val){
             return val+"testValue";
       }

  }

【讨论】:

  • “字符串豆”是什么意思?是的,我试图在这个类本身上调用一个方法......这似乎是不可能的。如果我理解正确,它们必须是实例方法?
  • 让我检查一下@OscarRyz
  • mybean 应该是 registered as a bean 使用例如@Bean(方法)、@Component(类)或类似的。
  • 没错,你也可以调用同一个bean中存在的方法,看看我的回答
  • 顺便还有#this
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2019-05-11
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多