【问题标题】:Spring xml to java config: how to convert nested xml bean definitionSpring xml to java config:如何转换嵌套的xml bean定义
【发布时间】:2014-10-16 02:17:50
【问题描述】:
 <bean
    name="ticketValidationFilter"
    class="org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter"
    p:service="https://my.local.service.com/cas-client">
    <property name="ticketValidator">
    <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
    <constructor-arg index="0" value="https://localhost:8443/cas" />
    </bean>
    </property>
  </bean>

谁能帮忙把这个xml定义转换成java配置?具体来说,我对如何声明ticketValidator 感到困惑。

    @Bean
    FilterRegistrationBean ticketValidationFilter(){

        Filter ticketValidationFilter = new
                org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter();

        FilterRegistrationBean frb = new FilterRegistrationBean();
        frb.addUrlPatterns("/*");
        frb.setFilter(ticketValidationFilter);

        // ticket Validator somewhere here

        Map<String, String> initParamMap = new HashMap<String, String>();
        initParamMap.put("service", "http://localhost:8889/cas-client");
        frb.setInitParameters(initParamMap);

        return frb;
    }

-----过滤器配置更新-------

如果您使用嵌套 bean 进行过滤器配置(例如在我的情况下),您在过滤器上设置的任何属性 - 如果您仅使用 setter,它们将为空(不知道为什么,如果有人急于解释请做)。

要解决这个问题:创建扩展 GenericFilterBean 的过滤器(@Component)并在那里设置你的属性。然后@Autowire 将其添加到您的配置中,并像往常一样在过滤器注册中使用设置器。**

如果您有简单的配置属性(例如字符串),那么您可以使用带有 init 参数的 Map 并将其设置在 FilterRegistration bean 上。

【问题讨论】:

    标签: java spring configuration


    【解决方案1】:

    由于它是一个仅在这个特定的外部 bean 中使用的 bean,您只需将其转换为实例创建并设置适当的属性。

    您不能使用Filter 接口,因为它没有票证验证器的设置器。

    改用AbstractTicketValidationFilter

    @Bean
    FilterRegistrationBean ticketValidationFilter(){
    
        AbstractTicketValidationFilter ticketValidationFilter = new
                org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter();
    
        FilterRegistrationBean frb = new FilterRegistrationBean();
        frb.addUrlPatterns("/*");
        frb.setFilter(ticketValidationFilter);
    
        //here be ticket validaror
    
        TicketValidator validator = new org.jasig.cas.client.validation.Cas20ServiceTicketValidator("https://localhost:8443/cas");
    
        ticketValidationFilter.setTicketValidator(validator);
    
        //end of ticket validator config
    
        Map<String, String> initParamMap = new HashMap<String, String>();
        initParamMap.put("service", "http://localhost:8889/cas-client");
        frb.setInitParameters(initParamMap);
    
        return frb;
    }
    

    java config 的整体美妙之处在于,一些复杂的 xml 配置可以转换为非常简单的 java。

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多