gpt4 book ai didi

java - 我们可以在其他注释中使用 spring 表达式(spel)吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:12 29 4
gpt4 key购买 nike

我希望能够做到这一点:

@Controller
@RequestMapping("/#{handlerMappingPaths.security}/*")
public class SecurityController {
etc

//for instance, to resuse the value as a base for the folder resolution
@Value("#{handlerMappingPaths.security}/")
public String RESOURCE_FOLDER;

@RequestMapping(value="/signin-again", method = RequestMethod.GET)
public String signinAgainHandler() {
return RESOURCE_FOLDER + "signin_again";
}
}

现在这似乎不起作用,我是不是漏掉了什么?

最佳答案

要了解此类情况,一种方法是亲自看看。这是一个用于 eclipse 的示例,但它对于其他 IDE 的工作方式应该类似:

首先,确保您拥有所使用的 spring 库的源代码。如果你使用 maven,这是最简单的,using the maven-eclipse-plugin或使用 m2eclipse .

然后,在 Eclipse 中选择 Navigate -> Open Type...。输入您要查找的类型(类似 RequestMa* 的内容应该适合像我这样的懒惰打字者)。输入/确定。现在右键单击源文件中的类名并选择References -> Project。在搜索 View 中,将出现该类或注释的所有使用。

其中之一是 DefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods(Class, boolean) ,此代码片段将告诉您未评估表达式语言:

ReflectionUtils.doWithMethods(currentHandlerType, new ReflectionUtils.MethodCallback() {
public void doWith(Method method) {
RequestMapping mapping = AnnotationUtils.findAnnotation(
method, RequestMapping.class);
if (mapping != null) {
String[] mappedPatterns = mapping.value();
if (mappedPatterns.length > 0) {
for (String mappedPattern : mappedPatterns) {
// this is where Expression Language would be parsed
// but it isn't, as you can see
if (!hasTypeLevelMapping && !mappedPattern.startsWith("/")) {
mappedPattern = "/" + mappedPattern;
}
addUrlsForPath(urls, mappedPattern);
}
}
else if (hasTypeLevelMapping) {
urls.add(null);
}
}
}
}, ReflectionUtils.USER_DECLARED_METHODS);

请记住,它叫做开源。如果您不尝试了解您正在使用的是什么,那么使用开源软件就没有意义。

关于java - 我们可以在其他注释中使用 spring 表达式(spel)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281978/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com