繁体   English   中英

Spring xml to Java config:如何转换嵌套的XML bean定义

[英]Spring xml to java config: how to convert nested xml bean definition

 <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,则它们将为null(不知道为什么,如果有人急于解释,请这样做)。

解决此问题的方法:创建扩展GenericFilterBean的filter(@Component)并在那里设置属性。 然后@Autowire将其连接到您的配置,并照常使用设置器进行过滤器注册。**

如果您具有简单的配置属性(例如String),则可以将Map与init参数一起使用,并在FilterRegistration bean上进行设置。

由于它是仅在此特定外部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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM