Xml - 在 bean 中注入方法的结果 属性

Xml - Inject result of method in a bean property

我正在使用 Apache Camel,我在 blueprint.xml 文件中有一个 bean 标签,如下所示:

 <bean id="shiroPolicy" class="org.apache.camel.component.shiro.security.ShiroSecurityPolicy">
          <argument value="shiro.ini"/>
               <property name="permissionsList" >
             <list>
                .......
            </list> 
          </property>
       </bean> 

permissionsList 属性 是此 class:

方法 perm() 的结果
public class testshiro{

    public List<Permission> perm()
    {
        List<Permission> permissionsList = new ArrayList<Permission>();
        Permission permission = new WildcardPermission("zone");
        permissionsList.add(permission);
        return permissionsList;
    }
    ....

我如何调用此方法并在 bean 标记上的 permissionsList 属性 中设置结果?

您应该能够将 testshiro 实例化为工厂,然后将 perm() 指定为工厂方法来创建列表。然后将对列表的引用传递给你的 Shiro 策略:

<bean id="permissionsFactory" class="your.package.testshiro"/>

<bean id="permissions" factory-ref="permissionsFactory" factory-method="perm" />

<bean id="shiroPolicy" class="org.apache.camel.component.shiro.security.ShiroSecurityPolicy">
    <argument value="shiro.ini"/>
    <property  name="permissionsList" ref="permissions" />
</bean>

这篇 tutorial 很好地概述了如何在 Blueprint 中使用工厂。

<bean id="permissionsFactory" class="com.ngt.shiropermission.testshiro"/>
<bean id="permissions" factory-ref="permissionsFactory" factory-method="perm" />
<bean id="shiroPolicy" class="org.apache.camel.component.shiro.security.ShiroSecurityPolicy">
    <argument value="shiro.ini"/>
    <property  name="permissionsList" ref="permissions" />
</bean>