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
?如果是,那么您需要能够注入一个非默认实例。
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
?如果是,那么您需要能够注入一个非默认实例。