Spring从实体访问属性的方式是什么?

时间:2017-11-10 11:24:04

标签: java spring spring-boot javabeans

我是Spring的新手,我正在构建一个应用程序,其中某些实体(JPA / Hibernate)需要从application.properties访问属性。我有一个配置类,其中这是微不足道的:

@Configuration
public class FactoryBeanAppConfig {    
    @Value("${aws.accessKeyId}")
    private String awsAccessKeyId;
    @Value("${aws.secretKey}")
    private String awsSecretKey;
}

但是由于实体没有,我认为他们不应该有@Configuration@Component这样的注释,他们访问该属性的Spring方式是什么?

现在,我知道我可以创建自己的类,我自己的bean,并将其作为属性的简单包装器;但这是Spring的方式还是另外一种方式?

5 个答案:

答案 0 :(得分:2)

使用@PropertySource指定属性文件位置 像下面的东西

@PropertySource("classpath:/application.proerties")

您还需要在配置中添加以下bean

@Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
        return new PropertySourcesPlaceholderConfigurer();
    }

答案 1 :(得分:1)

没有“Spring方式”,因为JPA实体和Spring之间没有任何关系。最重要的是,JPA实体不是Spring bean,因此Spring不知道或不关心它们,因为它们不是由Spring管理的。

您可以尝试破解,试图从不应该尝试访问它的代码中徒劳地访问Spring的配置,或者您可以接受您的设计被破坏并且您尝试做的事情并不意味着要做。

正如多次提出的那样,为此使用服务类。它由Spring管理,因此它可以访问Spring配置,它可以处理实体,因此没有跨越边界。

答案 2 :(得分:0)

您可以使用@PropertySource加载属性文件,如下所示

@Configuration
@PropertySource("classpath:/com/organization/config/application.proerties")
public class FactoryBeanAppConfig {
 ...
}

答案 3 :(得分:0)

首先在Spring管理的某个bean中创建一个公共静态变量,然后对@Value注释进行以下使用。

public static String variable;

@Value("${variable}")
private void setVariable(String value) {
    variable = value;
}

它将在启动时在运行时设置,现在您可以从实体和其他任何地方访问它,因为它只是一个公共静态变量。

答案 4 :(得分:-1)

实体不应访问环境属性。如果您通过服务使用实体,则服务可以访问属性以对实体进行操作。