简体   繁体   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>

Can anyone please help to convert this xml definition to java config? 谁能帮忙将此XML定义转换为Java配置吗? Specifically, I am confused about how to declare ticketValidator . 具体来说,我对如何声明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;
    }

-----UPDATE FOR FILTERS CONFIG------- -----更新过滤器配置-------

if you use nested beans for filter configuration(Eg. like in my case), whatever properties you set on your filters - they will be null if you use just setters(don't know why, if anyone eager to explain please do). 如果您使用嵌套bean进行过滤器配置(例如在我的案例中),那么您在过滤器上设置的任何属性-如果仅使用setter,则它们将为null(不知道为什么,如果有人急于解释,请这样做)。

To solve this issue: create filter(@Component) that extends GenericFilterBean and set your properties there. 解决此问题的方法:创建扩展GenericFilterBean的filter(@Component)并在那里设置属性。 Then @Autowire it to your config and use setters on filter registration as usual.** 然后@Autowire将其连接到您的配置,并照常使用设置器进行过滤器注册。**

If you have simple configuration property(eg. String) then you can use Map with init params and set it on the FilterRegistration bean. 如果您具有简单的配置属性(例如String),则可以将Map与init参数一起使用,并在FilterRegistration bean上进行设置。

Since it's a bean that's used only in this particular external bean, you simply convert it to an instance creation and set the apropriate property. 由于它是仅在此特定外部Bean中使用的Bean,因此您只需将其转换为实例创建并设置适当的属性即可。

You can't use Filter interface as that doesn't have the setter for ticket validator. 您不能使用“ Filter界面,因为该界面没有票证验证程序的设置器。

Use AbstractTicketValidationFilter instead: 使用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;
}

The whole beauty of java config is that some complex xml configurations can be converted to very simple java. Java config的全部优点在于,可以将某些复杂的xml配置转换为非常简单的Java。

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

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