3

Bean エイリアシングに関するこの投稿のフォローアップとして

プロパティを使用してBean参照を交換する目的で、エイリアスを使用して上記の投稿と同様のことを試みています(文字通り、上記の投稿と同じ目的を念頭に置いています)。

ただし、試してみると、Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'crypto.provider' が発生します。

デリゲートを使用して、この同じプレースホルダーをコンストラクター パラメーターとして渡すと、正常に動作します。以下はコードです

#property file
crypto.provider = safenet

applicationContext.xml

<beans>
    <alias name="${crypto.provider}" alias="defaultProvider" />
</beans>

クラス:

@Component ("caesar")
public class CaesarCipherEncryptionProvider implements EncryptionProvider{
//implementation here
}

@Component ("safenet")
public class SafenetEncryptionProvider implements EncryptionProvider{
//implementation here
}

テストケース

public class SafeNetEncryptionProviderTest extends AbstractIntegrationTest {

    @Autowired
    @Qualifier("defaultProvider") // note: Intellij can't find this bean
    private EncryptionProvider provider;

    @Test
    public void testEncryptDecrypt() throws Exception{
        String plaintext = "every.other.email.address.is.shorter.than.this.email.address" +
                "@long-email-addresses-incorporated.home-of-the-extra-long-email-addresses.com" +
                ".just.kidding.this.domain.is.really.German.de";
        byte[] plainTextAsBytes = plaintext.getBytes("UTF-8");

        byte[] encrypted = provider.encrypt(plaintext);
        String decrypted = provider.decrypt(encrypted);

        assertFalse(Arrays.equals(plainTextAsBytes, encrypted));
        assertEquals(plaintext, decrypted);
    }
}
4

0 に答える 0