Java SpEL:将动态填充的映射注入构造函数
我试图将动态构造的映射注入构造函数参数 我有两个类Java SpEL:将动态填充的映射注入构造函数,java,spring,dependency-injection,spring-el,Java,Spring,Dependency Injection,Spring El,我试图将动态构造的映射注入构造函数参数 我有两个类AuthHandler,MyAuthHandler。MyAuthHandler构造将传递给AuthHandler构造函数的映射。AuthHandler中存在重载构造函数,我想使用只接受Map(authorities)的构造函数创建其实例 我尝试了下面的代码,但在AuthHandler类中映射始终为空 env.xml <bean id="Handler" class="com.test.AuthHandler">
AuthHandler
,MyAuthHandler
。MyAuthHandler构造将传递给AuthHandler构造函数的映射。AuthHandler中存在重载构造函数,我想使用只接受Map(authorities)的构造函数创建其实例
我尝试了下面的代码,但在AuthHandler类中映射始终为空
env.xml
<bean id="Handler" class="com.test.AuthHandler">
<constructor-arg name="authorities" type="java.util.Map"
value="#{ T(com.test.MyAuthHandler).getAccessControlMap() }" />
</bean>
AuthHandler.java(来自依赖项)
公共类AuthHandler{
私人最终权力;
私人最终地图管理局;
公共授权处理程序(授权){
此(emptyMap(),权限);
}
公共AuthHandler(地图管理机构){
这(当局,新DenyAllAuthority());
}
AuthHandler(映射权限、权限默认权限){
this.defaultAuthority=defaultAuthority;
这个.权威=权威;
}
...
}
MyAuthHandler.java
public class MyAuthHandler {
public static Map<String, Authority> getAccessControlMap() {
// map will be created querying database
String path = "api-path/*";
Authority authority = new Authority("UserA");
Map<String, Authority> map = new HashMap<>();
map.put(path, authority);
return map;
}
}
公共类MyAuthHandler{
公共静态映射getAccessControlMap(){
//将通过查询数据库创建地图
字符串path=“api路径/*”;
权限=新权限(“用户A”);
Map Map=newhashmap();
地图放置(路径、权限);
返回图;
}
}
为什么不直接使用JavaConfig?感谢您的关注,AuthHandler来自一个依赖项,我无法将其更新为使用JavaConfig。我尝试了@Value
和Map
,效果很好。假设smth配置错误。您知道您可以为任何类(包括第三方类)声明@Bean
方法吗?谢谢,我使用了@Bean
,它工作正常,但无法用XML修复
public class MyAuthHandler {
public static Map<String, Authority> getAccessControlMap() {
// map will be created querying database
String path = "api-path/*";
Authority authority = new Authority("UserA");
Map<String, Authority> map = new HashMap<>();
map.put(path, authority);
return map;
}
}