2017-07-03 25 views
1

這裏我有一個方法getAWSCredential,它返回cred並帶有一些值。如何在不同類別中使用同一對象及其值

@Override 
    public AWSCredentialDTO getAWSCredential(String user_name) { 
     AWSCredentialDTO cred= (AWSCredentialDTO) entityManager.createNativeQuery("select * from aws_user_credentials a where a.user_name=:userName",AWSCredentialDTO.class) 
     .setParameter("userName", user_name).getSingleResult(); 
     return cred; 

    } 

在這裏我還有一個服務ec2,我需要利用以往方法cred返回的值。

private AmazonEC2 ec2; 

    public AmazonEC2 ec2() { 
     BasicAWSCredentials awsCreds = new BasicAWSCredentials(aws_access_key_id, 
       aws_secret_access_key); 
     return AmazonEC2ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 
       .withRegion(Regions.AP_SOUTH_1).build(); 
    } 

上述兩種方法都是分開的類。首先,我將運行getAWSCredential,然後我將調用ec2,我需要使用cred的值。任何人都可以建議我怎麼做到這一點? 這是一個彈簧啓動應用程序。

+0

您是否嘗試序列化 – Gundamaiah

+0

如何做@Gundamaiah – Nithyananth

回答

1

創建一個單獨的類說ClassCred和同一類ClassCred credObj = new ClassCred()內創建ClassCred的對象。從getAWSCredential(String user_name)方法獲得credObj方法並將由getAWSCredential方法返回的cred設置爲credObj。現在對象credObj的方法返回值cred返回getAWSCredential方法。現在從你的ec2()方法你可以調用credObj並獲取存儲在其中的值。

1

也許你想爲它使用DependencyInjection它,如果憑證是全局的或者在上下文中,你可以創建一個bean來存儲證書或者EC2實例作爲代理來在會話的上下文中訪問它的用戶。

請指定您是否有一個用戶名/密碼,或者您有多個不同的請求需要使用用戶名或其他名稱提供。

如果你有一個,你可以創建一個API密鑰並將其設置爲application.properties。您可以使用cloud.aws.credentials.accessKey和​​。

+0

我覺得這是一個更好的答案,請張貼一些代碼以供參考。 – 11thdimension

1

您將不得不創建包含getAWSCredential的類的spring bean,並在需要它的類中自動裝入它。檢查下面的示例代碼。

@Component 
public class AmazonUtil { 
    ... 

    @Override 
    public AWSCredentialDTO getAWSCredential(String user_name) { 
     AWSCredentialDTO cred= (AWSCredentialDTO) entityManager.createNativeQuery("select * from aws_user_credentials a where a.user_name=:userName",AWSCredentialDTO.class) 
     .setParameter("userName", user_name).getSingleResult(); 
     return cred; 
    } 
} 

@Component 
public class Test { 
    @Autowired 
    private AmazonUtil amazonUtil; 

    public AmazonEC2 ec2(String userName) { 
     AWSCredentialDTO credsDto = amazonUtil.getAWSCredential(userName); 

     BasicAWSCredentials awsCreds = ...construct using credsDto 

     return AmazonEC2ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 
       .withRegion(Regions.AP_SOUTH_1).build(); 
    } 
} 
+0

但是在這種情況下,我會從Test.ec2()等各種其他類中使用ec2()方法。所以我不認爲你的解決方案會運行 – Nithyananth

+0

同樣的事情也必須完成,'Test'是一個'spring-bean',所以它可以注入到其他類的字段中,就像'AmazonUtil'注入到其中一樣。 – 11thdimension

+0

或者他使用單身;-)但是無論如何,我認爲你在這裏是正確的。 – GhostCat

相關問題