我有一个用@Entry
注释的类。该注释接受两个参数base
和objectClasses
。我想从静态配置文件application.yaml
中加载这两个参数。
这是课程src/main/com.my.package/User/User.java
:
import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id;
import javax.naming.Name;
@Entry(base = "${ldap.organizationalUnitString}" , objectClasses = "${ldap.objectClass}")
public class User {
@Id
private Name id;
private @Attribute(name = "cn") String username;
private @Attribute(name = "sn") String password;
//Getters and setters
}
这是我的配置文件src/resources/application.yaml
:
ldap:
partitionSuffix: myPartitionSuffix
partition: myPartition
principal: "my Principal"
password: myPassword
url: ldap://myURL.url
organizationalUnitString: "my OU"
objectClass: User
当前编写方式,我得到一个运行时异常
org.springframework.ldap.InvalidNameException:无效的名称: $ {ldap.organizationalUnitString};
我已经使用@Value
批注尝试了https://stackoverflow.com/a/38125875/4640960,但是我遇到了编译时错误
类型不匹配:无法从“值”转换为“字符串”
是否有某种方法可以实现我想要的目标?我知道使用public static final
变量是可能的,如下所示:
import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id;
import javax.naming.Name;
import static com.my.package.User.User.base;
import static com.my.package.User.User.objectClass;
@Entry(base = base , objectClasses = objectClass)
public class User {
public static final String base = "my OU";
public static final String objectClass = "User";
@Id
private Name id;
private @Attribute(name = "cn") String username;
private @Attribute(name = "sn") String password;
//Getters and setters
}
但是我不想在类中对参数进行硬编码。
还有其他几个问题,关于将非静态变量作为注释参数进行传递,我知道这是不可能的,但是我的问题略有不同。我只想传递静态配置属性。