1

Spring を使用して Bean を作成した後にメソッドを呼び出したい、たとえば作成してスキーマを作成するが、スキーマ Bean を作成する前にFactory同じメソッドを呼び出したい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>
4

2 に答える 2

2

の代わりに独自のファクトリ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"/>
于 2012-06-01T11:44:33.300 に答える
1

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を呼び出しますか?それらはすべてゲッターまたはセッターのように見えるので、通常の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;
    }
}

そして、このように使用します(factory-method不要):

<bean id="schemaFact" class="SchemaFactoryFactoryBean"/>
于 2012-06-01T11:40:30.837 に答える