Spring中Bean的屬性賦值@Value()---使用類配置的方式


 

來源: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中

已經被加載到了項目中,在項目中可以通過該注解獲取配置文件中的信息,此法簡簡單單

 

配置文件

 

 

取值 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM