Java 应用程序上下文中某些bean的依赖关系形成一个循环:在spring引导中
应用程序上下文中某些bean的依赖关系形成一个循环:Java 应用程序上下文中某些bean的依赖关系形成一个循环:在spring引导中,java,spring-boot,dependency-injection,inversion-of-control,Java,Spring Boot,Dependency Injection,Inversion Of Control,应用程序上下文中某些bean的依赖关系形成一个循环: ┌─────┐ | encode defined in class path resource [com/extenso/bi/backend/crm/config/BaseConversion.class] ↑ ↓ | decode defined in class path resource [com/extenso/bi/backend/crm/config/BaseConversion.class] └─────┘ 在这
┌─────┐
| encode defined in class path resource [com/extenso/bi/backend/crm/config/BaseConversion.class]
↑ ↓
| decode defined in class path resource [com/extenso/bi/backend/crm/config/BaseConversion.class]
└─────┘
在这种情况下,可以使用util类。关于什么是util类,这里有一个很好的解释。对于bean,您可以从这里的文档中检查什么是springbean以及它们是如何配置的
您似乎没有理解依赖注入的目的。将
字符串
或布尔值
这样的简单数据值声明为bean几乎毫无意义;事实上,这些看起来只是纯函数,应该是静态的。
@Configuration
public class BaseConversion {
private static final String allowedString "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ0123456789";
private final char[] allowedCharacters = allowedString.toCharArray();
private final int base = allowedCharacters.length;
@Bean
@Primary
@Qualifier("encode")
public String encode( long id) {
var encodedString = new StringBuilder();
if (id == 0) {
return String.valueOf(allowedCharacters[0]);
}
while (id > 0) {
encodedString.append(allowedCharacters[(int) (id % base)]);
id = id / base;
}
return encodedString.reverse().toString();
}
@Bean
@Qualifier("getCheckSum")
public String getCheckSum(long num) {
int checksumNum = (int) ((num + 5) % (base * base));
String checksum = encode(checksumNum);
if (checksum.length() == 1) {
checksum = encode((checksumNum + 5) % base) + checksum;
}
return checksum;
}
@Bean
@Qualifier("checkShortUrl")
public boolean isShortUrlValid( String shortUrl) {
String checkSum = shortUrl.substring(0, 2);
long decodedBaseUrl = decode(shortUrl.substring(2));
return (checkSum.equals(getCheckSum(decodedBaseUrl)));
}
@Bean
@Qualifier("decode")
public long decode( String baseInput) {
var characters = baseInput.toCharArray();
var length = characters.length;
var decoded = 0;
var counter = 1;
for (char character : characters) {
decoded += allowedString.indexOf(character) * Math.pow(base, length - counter);
counter++;
}
return decoded;
}
}