4

有时我们会在代码中出错,并将@Autowired原型范围的 bean 变成单例范围的 bean。这当然是错误的,因为单例可能会像使用单例一样使用该依赖项。

有什么方法可以拦截自动装配/DI 过程以检测到这一点并引发错误?这将用于在开发时进行检测。

4

1 回答 1

1

实现这一目标的最佳方法是通过您的单元测试。例如:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyAppConfig.class, loader = AnnotationConfigContextLoader.class)
public class MyServiceTest {

    @Autowired(required = true)
    MyService myService;

    @Test 
    public void shouldAutowire() {}

}

@ContextConfiguration 可以与上面的 Java 配置一起使用,也可以引用 XML 配置文件。通过这样做,Spring 将用于在您运行测试时注入所有依赖项。通过在 @Autowired bean 中包含“required = true”,您可以确保 Spring 在该阶段抛出异常,并且您的测试将失败。上面的示例可能看起来并不花哨,但它可以确保捕获任何配置错误。当然,您可以更进一步,让您的测试使用注入的 bean。我发现这对于数据库访问集成测试相当方便。

这不会拦截自动装配过程本身,但您当然可以测试您的 bean 是否正确运行。

您将需要导入 spring-test 依赖项。即对于Maven:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    <scope>test</scope>
</dependency>
于 2013-11-07T14:32:11.780 回答