java 库应该自动装配吗?

should a java library be autowired?

Java Spring 的一个特性是依赖注入。当您编写单独的 classes 并实例化到另一个 class 中作为依赖项时,使用@Autowired 和@Component 而不是使用 new 的好习惯。变量 counter 是否应该是 @Autowired 并由另一个 class 返回?下面是@Component 的示例class。以下是有关 dep inj 的一些信息:https://www.tutorialspoint.com/spring/spring_dependency_injection.htm

@Component
class CounterClass {
    private final AtomicLong counter;

    public CounterClass() {
        this.counter = new AtomicLong();
    }
}


package com.example.restservice;

import java.util.concurrent.atomic.AtomicLong;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    //should counter be @Autowired??
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

您应该注入您可能想要替换的任何内容,例如在单元测试期间。

在这种情况下,您是否可能希望在测试时使用不从 0 开始的 AtomicLong?如果是,那么您需要能够注入一个非默认实例。