1

「ファイルリソースをSpring Beanに注入する」と非常によく似た状況があります

いくつかの .jasper コンパイル済みファイルを使用するコントローラーがあり、それらをそのように宣言しています

//...
@Controller
public class InvoicingController {

private Resource quoteTemplate;
...//

そして、私のコンテキスト構成ファイルで

<bean id="invoicingController" class="x.x.InvoicingController">
    <property name="quoteTemplate" value="/WEB-INF/jasper/Quote.jasper" />
...

関数にブレークポイントを設定すると、setQuoteTemplate()関数が呼び出されResource、コンテナーを初期化するときにオブジェクトが適切に設定されます。しかし、実際にコントローラーを叩くquoteTemplateとnullになります。

私は、コントローラーがシングルトンであることを理解しています。私の理解にギャップがない限り、コントローラーが処理する URL にアクセスすると、コンテナーの初期化中に設定された値が null になる理由がわかりません。

編集:

ありがとう @Sotirios Delimanolis

私はそのようにBeanを宣言することになりました:

    <bean id="quoteFile" class="java.io.File">
        <constructor-arg value="resources/jasper/Quote.jasper" />
    </bean>

    <bean id="quoteTemplate" class="org.springframework.core.io.FileSystemResource">
        <constructor-arg ref="quoteFile" />
    </bean>

そして、@Autowireそのような依存関係をingします

@Autowired @Qualifier("quoteTemplate") private Resource quoteTemplate;

@QualifierBean として宣言された複数のResource実装クラスがあり、これにより正しいものが使用されるようになるため、使用されます。

4

1 に答える 1