來源:https://blog.csdn.net/jinhaijing/article/details/83902191
使用@Value賦值的幾種類型;
//1、基本數值
//2、可以寫SpEL; #{}。 SpEL(Spring Expression Language),即Spring表達式語言,是比JSP的EL更強大的一種表達式語言。
//3、可以寫${};取出配置文件【properties】中的值(在運行環境變量里面的值)
SPEL詳細:https://www.jianshu.com/p/e0b50053b5d3
一、新建person.properties文件
內容:
person.nickName=小張三
二、新建配置類 MainConfigOfPropertyValues.java
使用@PropertySource讀取外部配置文件中的k/v保存到運行的環境變量中;加載完外部的配置文件以后使用${}取出配置文件的值;並注入Person對象
package com.atguigu.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import com.atguigu.bean.Person; //使用@PropertySource讀取外部配置文件中的k/v保存到運行的環境變量中;加載完外部的配置文件以后使用${}取出配置文件的值 @PropertySource(value={"classpath:/person.properties"}) @Configuration public class MainConfigOfPropertyValues { @Bean public Person person(){ return new Person(); } }
三、新建Person類
屬性上面@Value()表示賦值
@Value("#{20-2}"):使用了正則表達式的值
@Value("${person.nickName}"):表示引用到了person.properties中定義的person.nickName的值,在配置了中加載了properties文件
package com.atguigu.bean; import org.springframework.beans.factory.annotation.Value; public class Person { //使用@Value賦值; //1、基本數值 //2、可以寫SpEL; #{} //3、可以寫${};取出配置文件【properties】中的值(在運行環境變量里面的值) @Value("張三") private String name; @Value("#{20-2}") private Integer age; @Value("${person.nickName}") private String nickName; public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Person(String name, Integer age) { super(); this.name = name; this.age = age; } public Person() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", nickName=" + nickName + "]"; }
}
這種方式也等同於spring的xml中:
<context:property-placeholder location="classpath:person.properties"/> <!-- 包掃描、只要標注了@Controller、@Service、@Repository,@Component --> <context:component-scan base-package="com.atguigu" use-default-filters="false"></context:component-scan> <bean id="person" class="com.atguigu.bean.Person" > <property name="age" value="#{20-2}"></property> <property name="name" value="小張三"></property> <property name="nickName" value="${person.nickName}"></property> </bean>
四、新建測試類
打印Person對象的值
package com.atguigu.test; import org.junit.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import com.atguigu.bean.Person; import com.atguigu.config.MainConfigOfLifeCycle; import com.atguigu.config.MainConfigOfPropertyValues; public class IOCTest_PropertyValue { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfPropertyValues.class); @Test public void test01(){ printBeans(applicationContext); System.out.println("============="); Person person = (Person) applicationContext.getBean("person"); System.out.println(person); applicationContext.close(); } //打印spring啟動后加載的對象 private void printBeans(AnnotationConfigApplicationContext applicationContext){ String[] definitionNames = applicationContext.getBeanDefinitionNames(); for (String name : definitionNames) { System.out.println(name); } } }
結果:
如何偷懶?
在使用Springboot項目搭建的項目時,配置文件application.properties中
已經被加載到了項目中,在項目中可以通過該注解獲取配置文件中的信息,此法簡簡單單
配置文件
取值