2016-07-17 5 views
0

春についてのいくつかの学習コースとチュートリアルの後、私は時には最も優雅なやり方でやることに時々苦労します。Spring:既存のクラスと同じタイプのオートワイヤー・ビーンズ

私は、GregorianCalendarを処理するRestTemplateオブジェクトを構成する必要があります。これは、Jsonポスト本体に希望の形式で日付を印字し、ログ本体にポスト本体の内容を記録します。

ここでサブクラスを作成する必要はありません。既存のプロパティをカスタム値に設定するだけで、他のBeanを作成することができます。

このコードに問題はありませんが、使用するクラスに注入する方法はありますか? @Autowiredを使うときは、フレームワークのRestTemplateクラスと私のカスタマイズしたクラスを区別するために、修飾子を指定する必要があります。 または、ここでメソッドの名前であるid値を使用してBeanを挿入することはできますか?私の場合はsetuRestTemplateですか? おそらく、このBeanを名前で簡単に注入する方法がありますが、私はそれを行うためにあらかじめ決められた方法がわかりません。以下のよう

import org.springframework.web.client.RestTemplate; 
//more imports 

@Configuration 
public class SixdegreesAppContext { 


@Bean 
public RestTemplate setuRestTemplate() { 

    RestTemplate restTemplate = new RestTemplate(); 
    restTemplate.setMessageConverters(getSetuMessageConverters()); 

    //enable logging of post body 
    ClientHttpRequestInterceptor loggingRequestInterceptor = new LoggingRequestInterceptor(); 
    List<ClientHttpRequestInterceptor> ris = new ArrayList<>(); 
    ris.add(loggingRequestInterceptor); 

    restTemplate.setInterceptors(ris); 
    restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); //no sure why this is needed 

    return restTemplate; 
} 

@Bean 
public List<HttpMessageConverter<?>> getSetuMessageConverters() { 
    List<HttpMessageConverter<?>> converters = new ArrayList<>(); 
    MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); 
    jackson2HttpMessageConverter.setObjectMapper(getSetuObjectMapper()); 
    converters.add(jackson2HttpMessageConverter); 
    return converters; 
} 

@Bean 
public ObjectMapper getSetuObjectMapper() { 
    ObjectMapper jacksonObjectMapper = new ObjectMapper(); 
    SimpleModule module = new SimpleModule(); 
    module.addSerializer(XMLGregorianCalendar.class, new XmlGregorianCalendarSerializer()); 
    jacksonObjectMapper.registerModule(module); 
    return jacksonObjectMapper; 
} 


} 

答えて

1

あなたは自分のBeanに名前を付けることができます。

public final static String REST_TEMPLATE_BEAN_NAME = "myRestTemplate"; 
@Bean(name = {REST_TEMPLATE_BEAN_NAME}) 
public RestTemplate getRestTemplate() { 
    //... 
    return new CustomizeRestTemplate(); 
} 

は、その後、あなたが以下のようにそれを参照することができます。

@Resource(name = REST_TEMPLATE_BEAN_NAME) 
RestTemplate restTemplate; 

覚えておいてください、REST_TEMPLATE_BEAN_NAMEは、前に定義された静的フィールドです。これは、あなたの望むことですか?

+0

もちろん、静的なStringメンバーフィールドを定義し、必要に応じて参照することで名前を付けることができます。 –

+0

ご返信ありがとうございます。@Resourceアノテーションはおそらく私が使用できるものです。メソッド名が既にidとして機能しているので、name属性が本当に必要ではないと思っていました。 – klausch

+0

はい、そうです。あなたが望むならば、その暗黙のアイデンティティを使うことができます。しかし、それは誤解を招く可能性があります。しかし、どちらも機能します。お楽しみください。 –

関連する問題