
# 本地应用注入iDME注解示例
#### 示例场景
对于拥有本地应用的用户，在本地安装数据管理API代理器后，只需要在启动类中注入**@ComponentScan(basePackages = {"com.huawei.innovation", "*用户自定义的项目包路径*"})**注解，运行启动类即可。
#### 操作步骤
在启动类上方添加**@ComponentScan(basePackages = {"com.huawei.innovation", "com.minibom"})** 注解，引入iDME的JAR包。其中，"com.huawei.innovation"表示iDME的组件包路径，"com.minibom"表示用户实际项目包路径。
```
package com.singzai;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = {"com.huawei.innovation", "com.minibom"})
@SpringBootApplication
public class MainApplication{
     public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); }
}
```
自定义RestTemplate组件，并在**@ComponentScan** 注解指定的包路径下创建一个配置类，如"com.minibom.config.RestTemplateConfiguration"，并注入RestTemplateBuilder和RestTemplate两个Bean对象。其示例代码如下：
```
package com.minibom.config;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.ssl.ConscryptClientTlsStrategy;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.core5.http.HttpHost;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
@Configuration
public class RestTemplateConfiguration {
    @Bean
    public RestTemplateBuilder restTemplateBuilder() {
        return new RestTemplateBuilder();
    }
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder)
        throws NoSuchAlgorithmException, KeyManagementException {
        TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, trustAllCerts, SecureRandom.getInstanceStrong());
        PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
            .setTlsSocketStrategy(new ConscryptClientTlsStrategy(sslContext, NoopHostnameVerifier.INSTANCE))
            .build();
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
        HttpComponentsClientHttpRequestFactory customRequestFactory = new HttpComponentsClientHttpRequestFactory();
        customRequestFactory.setHttpClient(httpClient);
        return builder.requestFactory(() -> customRequestFactory).build();
    }
}
```
