创建一个公共接口和私有的实现类包。手段AddressingService
是公共接口,AddressingServiceImpl
只是带有@Service
注释的私有包。现在没有人能够创建您的 spring-bean 的实例,并且根据您的 bean 范围,只有一个实例可供其他人使用。您可以将 bean 自动装配为@Autowired AddressingService
.
一个示例 junit 测试用例,用于测试是否AddressingServiceImpl
直接在同一包内的任何类中使用。
在这种情况下,这些类位于 src/main/java/com/address 包中。并且测试类是在 src/test/java/com/address 中创建的。
package com.address;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import org.junit.Test;
import org.junit.*;
public class BeansInitTest {
@Test
public void test() {
File[] files = new File("src/main/java/com/address").listFiles((File dir, String name) -> {
return name.endsWith(".java") && !name.equals(AddressServiceImpl.class.getSimpleName() + ".java");
}
);
Arrays.asList(files)
.stream().forEach(clazz -> checkInstanceCreation(clazz, AddressServiceImpl.class.getSimpleName()));
}
private void checkInstanceCreation(File clazz, String name) {
try (BufferedReader reader = new BufferedReader(new FileReader(clazz))){
reader.lines().forEach(l -> {
Assert.assertFalse(l.contains(name));
});
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
请注意,这只是一个示例,可以根据需要进行概括。