「ファイルリソースを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;
@Qualifier
Bean として宣言された複数のResource
実装クラスがあり、これにより正しいものが使用されるようになるため、使用されます。