gpt4 book ai didi

java - 注释顺序在 SB 应用程序中是否重要?

转载 作者:行者123 更新时间:2023-12-05 07:08:37 26 4
gpt4 key购买 nike

在我看来,注释顺序不同会破坏我的构建。

Does annotations order matter?

上面的答案说,一般来说,注释顺序应该无关紧要。就我而言,它坏了。

这是模块公共(public)

@ConditionalOnProperty(value = "calculatorEnabled", havingValue = "true")
@Component
class Calculator {

// some logic
}
@ConditionalOnBean(Calculator.class)
@Service
class CalculationService {

private final Calculator calculator;

@Autowired
public CalculationService(final Calculator calculator) {
this.calculator = calculator;
}
// some logic
}
@RequestMapping(value = "/calculations", produces = MediaType.APPLICATION_JSON_VALUE)
@ConditionalOnBean(CalculationService.class)
@RestController
class CalculationController {

}

再多一个模块——高级计算

它有模块 commons 作为依赖(maven 依赖)。

请注意,这里有两个 maven 模块。所以 CalculationController 在其他使用 commons 依赖的模块中可用。

现在,让我在高级计算中进行两个测试。 (同样,我决定在另一个模块中测试 CalculationController)。

我知道最好在实际定义组件的模块中进行测试,但是commons 模块是很久以前由其他团队编写的;现在我们必须使用它。

我想确保如果我们更新 commons 的版本,应用程序不应中断(API 不应更改)。因此,我将 CalculationContrioller 的集成测试添加到 advanced-calculation 模块中。

@SpringBootTest(classes = [AdvancedCalculationApplication.class],properties = ["calculatorEnabled=true" ])
@AutoConfigureMockMvc
AdvancedCalculationsITTest extends Specification {

}

@SpringBootTest(classes = [AdvancedCalculationApplication.class],properties = ["calculatorEnabled=" ])
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@AutoConfigureMockMvc
AdvancedCalculationsITTestsDisabled extends Specification {

}

mvn clean install 失败,因为 AdvancedCalculationsITTest 失败。错误无法 Autowiring CalculationController,因为没有候选 calculationService

但是,当我稍微改变注释的顺序时,它就起作用了

@ConditionalOnBean(CalculationService.class)
@RequestMapping(value = "/calculations", produces = MediaType.APPLICATION_JSON_VALUE)
@RestController
class CalculationController {

}

最佳答案

我会更新这个答案,但稍后会更新。

对我来说是 TODO。(我会做一个演示并添加到github的链接并放一些代码示例)。

欢迎您的想法和建议!

我在方法上有 2 个自定义注释 (RUNTIME):一个注释使方法始终抛出异常 @Exceptional,另一个 @Catchable 始终捕获异常异常(exception)。为简单起见,让此方法返回 void。通过以不同的顺序放置这些注释,您应该会得到不同的结果。

@Catchable
@Exceptional
public void processAction() {
// There is nothing that throws an exception.
safeStatement1();
safeStatement2();

safeStatementN();
}

对比

@Exceptional
@Catchable
public void processAction() {
// There is nothing that throws an exception.
safeStatement1();
safeStatement2();

safeStatementN();
}

By having these annotations in different order, the result should be different.

关于java - 注释顺序在 SB 应用程序中是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61825135/

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