如何在不同的类中使用相同的对象及其值

时间:2017-07-03 11:54:12

标签: java spring spring-boot spring-data-jpa

我在这里有一个方法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的值。任何人都可以建议我如何实现这一目标? 这是一个春季启动应用程序。

3 个答案:

答案 0 :(得分:1)

如果凭据是全局的或在上下文中,您可能希望使用DependencyInjection,您可以创建一个存储凭据的bean或作为代理的EC2实例,以便在其上下文中访问它。用户的会话。

请指定您是否拥有单个用户名/密码,或者您是否拥有多个用户名/密码,并且需要使用用户名或其他用户来提供不同的请求。

如果你有一个,你可以创建一个API密钥并在onclick event中设置它。您可以使用application.propertiescloud.aws.credentials.accessKey

答案 1 :(得分: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();
    }
}

答案 2 :(得分:1)

创建一个单独的班级ClassCred,并在同一班级ClassCred内为ClassCred credObj = new ClassCred()创建一个对象。从credObj方法获取getAWSCredential(String user_name),并将cred方法返回的getAWSCredential设置为credObj。现在,对象credObj具有cred方法返回的值getAWSCredential。现在,您可以使用ec2()方法调用credObj并获取存储在其中的值。