如何使用spring调用方法?

如何使用spring调用方法?,spring,methods,Spring,Methods,我想在使用spring创建bean之后调用一个方法,例如我创建了Factory和schema,但我想在创建schema bean之前调用Factory的相同方法 <!-- schemaFactory--> <bean id="schemaFact" class="javax.xml.validation.SchemaFactory" factory-method="newInstance"> <constructor-arg

我想在使用spring创建bean之后调用一个方法,例如我创建了
Factory
和schema,但我想在创建schema bean之前调用
Factory
的相同方法

 <!-- schemaFactory-->
    <bean id="schemaFact" class="javax.xml.validation.SchemaFactory"
        factory-method="newInstance">
        <constructor-arg value="http://www.w3.org/2001/XMLSchema" />
    </bean>

<!-- schema -->
    <bean id="schema" class="javax.xml.validation.Schema"
        factory-bean="schemaFact" factory-method="newSchema">
        <constructor-arg value="3DSecure.xsd" />
    </bean>

如果您使用的是Spring 3.0/3.1,您可以利用Java配置:

@Configuration
class Config {

    @Bean
    public SchemaFactory schemaFact() throws SAXNotSupportedException, SAXNotRecognizedException {
        final SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        schemaFactory.setFeature("apache.org/xml/features/validation/schema-full-checking", false);
        return schemaFactory;
    }


    @Bean
    public Schema schema() throws SAXException {
        return schemaFact().newSchema(new File("3DSecure.xsd"));
    }
}
但是您想调用
SchemaFactory
上的哪个方法?似乎它们都是getter或setter,所以您可以使用普通的XML注入。。。或者创建自己的
FactoryBean

class SchemaFactoryFactoryBean implements FactoryBean<SchemaFactory> {

    @Override
    public SchemaFactory getObject() throws Exception
    {
        final SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        schemaFactory.setFeature("apache.org/xml/features/validation/schema-full-checking", false);
        return schemaFactory;
    }

    @Override
    public Class<?> getObjectType()
    {
        return SchemaFactory.class;
    }

    @Override
    public boolean isSingleton()
    {
        return true;
    }
}

您可以使用自己的工厂bean而不是
javax.xml.validation.SchemaFactory
,它将委托给
javax.xml.validation.SchemaFactory
,并调用该方法:

public class MySchemaFactory {
    public SchemaFactory newInstance() {
        SchemaFactory factory = SchemaFactory.newInstance();
        factory.callSomeMethod();
        return factory;
    }
}

<bean id="mySchemaFactory" class="com.foo.bar.MySchemaFactory"/>

<bean id="schemaFact"
      factory-bean="mySchemaFactory"
      factory-method="newInstance"/>
公共类MySchemaFactory{
公共SchemaFactory newInstance(){
SchemaFactory工厂=SchemaFactory.newInstance();
factory.callsomethod();
返回工厂;
}
}

谢谢,我想调用setFeature(“,false”);但这不是财产!
public class MySchemaFactory {
    public SchemaFactory newInstance() {
        SchemaFactory factory = SchemaFactory.newInstance();
        factory.callSomeMethod();
        return factory;
    }
}

<bean id="mySchemaFactory" class="com.foo.bar.MySchemaFactory"/>

<bean id="schemaFact"
      factory-bean="mySchemaFactory"
      factory-method="newInstance"/>