我正在尝试在SpringBoot Appilcation中使用属性。但是当我试图调用new MappingProperties().getLogin()
时,我总是得到一个空值。拜托,有人可以解释一下我做错了吗?
申请类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@EnableConfigurationProperties
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
以下是我尝试访问属性的方法
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
@PropertySource("classpath:mapping.properties")
@ConfigurationProperties(prefix = "user")
public class MappingProperties {
private String login;
public String getLogin(){
return login;
}
public void setLogin(String login){
this.login = login;
}
}
这是我的mapping.properties
文件,位于src\main\resources\mapping.properties
user.login = /login
此处还有build.gradle
buildscript {
repositories {
maven { url 'http://repo.spring.io/plugins-release' }
}
dependencies {
classpath 'io.spring.gradle:propdeps-plugin:0.0.9.RELEASE'
}
}
plugins {
id 'org.springframework.boot' version '1.5.4.RELEASE'
}
configure(allprojects) {
apply plugin: 'propdeps'
apply plugin: 'propdeps-maven'
apply plugin: 'propdeps-idea'
apply plugin: 'propdeps-eclipse'
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-actuator:1.5.4.RELEASE'
compile 'org.springframework.boot:spring-boot-devtools:1.5.4.RELEASE'
optional "org.springframework.boot:spring-boot-configuration-processor"
testCompile 'org.springframework.boot:spring-boot-starter-test:1.5.4.RELEASE'
}
答案 0 :(得分:3)
@yurii您正在创建始终返回null的新的MappingProprties new MappingProperties().getLogin()
。您必须从spring上下文获取MappingProperties的对象。根据您的代码,spring DI不知道您的new
MappingProperites对象。
(如果你想使用new
,那么每次你必须注入login
字段的值,但我认为这不是一个很好的方式来在春季工作<) / EM>
我正在使用您的代码作为参考。
//simple and basic config for any spring boot application
@SpringBootApplication
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
没有。使用属性文件的方法。我们将讨论其中两个(您将这些概念相互混合)。让我们清楚地理解它。
第一种方式:
►通过这种方式,我们必须告诉属性文件的名称,以便将字段值注入到spring
►创建anyname.properties文件 anyname.properties
user.login:/login
►创建新的配置java文件 PropConfig.java
@Configuration
@PropertySource(value="classpath:anyname.properties")
public class PropConfig{
//you can inject property values anywhere in the code that is under spring context(e.g. @Service, @Repository, @Component etc)
@Value("${user.login}")
private String login;
public String getUserLogin(){
return login;
}
}
第二种方式:
►我们将使用注释@ConfigurationProperties
►创建NewProps.java文件
@ConfigurationProperties(prefix = "user")
public class NewProps{
//value of this field will be automatically mapped to "user.login" in "anyName.properties" file
private String login;
public String getUserLogin(){
return login;
}
}
►根据{em> @ConfigurationProperties 的documentation:
外部化配置的注释。将其添加到课程中 定义或a 如果要绑定和验证,请在{@code @Configuration}类中使用{@code @Bean}方法 一些外部属性(例如来自.properties文件)。
//here we are making property values as fields of custom bean
//now property values will be accessed in a way, as field of some ordinary java bean
@Configuration
public class NewConfig {
@Bean
NewProps newProps(){
return new NewProps();
}
}
►访问属性值
@Autowired
NewProps newProps;
//in your code
...
newProps.getUserLogin();
...
注意:如果您对此有任何疑问,请与我们联系
答案 1 :(得分:1)
您必须通过依赖注入或在Spring容器中连接它们来管理两个类之间的依赖关系。
因此,通过自动装配将 MappingProperties 作为实例变量注入调用类:
@Autowired
private MappingProperties mappingProperties;
...
mappingProperties.getLogin();
...
答案 2 :(得分:0)
Spring并不知道您的登录字段,我的意思是它不知道必须在那里注入某些东西。你应该告诉spring注入值。
尝试使用private String login;
注释@Value("${login}")
。
或删除@ConfigurationProperties(prefix = "user")
并使用@Value("${user.login}")