spring解析占位符分析,如@Value注解,xml文件中配置

示例:

配置文件:



  
    
  
  
  

 test.properties:

test:study

test2.properties:

test:play

实例: 

package com.spring.bean;

import lombok.Data;

import javax.annotation.PostConstruct;

@Data
public class Student extends Person  {

    private String name;

    private  int age;

    @Override
    public String show(String str) {
        System.out.println("Studeng:test()");
        return str;
    }

}

测试:

 @org.junit.Test
    public void test7() throws InterruptedException {

        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Student bean =(Student)context.getBean("student");

        System.out.println("Student:"+bean.getName());

    }

结果:

 源码分析:自定义标签解析PropertyPlaceholderBeanDefinitionParser

spring解析占位符分析,如@Value注解,xml文件中配置_第1张图片

spring解析占位符分析,如@Value注解,xml文件中配置_第2张图片

解析配置文件中的值并赋值:PropertySourcesPlaceholderConfigurer实现了BeanFactoryPostProcessor接口

spring解析占位符分析,如@Value注解,xml文件中配置_第3张图片

 在这儿加入到embeddedValueResolvers容器中:

spring解析占位符分析,如@Value注解,xml文件中配置_第4张图片

spring解析占位符分析,如@Value注解,xml文件中配置_第5张图片

 以解析string为例:

spring解析占位符分析,如@Value注解,xml文件中配置_第6张图片

spring解析占位符分析,如@Value注解,xml文件中配置_第7张图片

解析@value注解,通过AutowiredAnnotationBeanPostProcessor

spring解析占位符分析,如@Value注解,xml文件中配置_第8张图片

 这里从embeddedValueResolvers容器中获取解析:

spring解析占位符分析,如@Value注解,xml文件中配置_第9张图片

注意:如果多个配置文件中的key值相同,value值会取最后配置的,因为会覆盖掉前面的值,例如: 最后name的值为study;

你可能感兴趣的:(spring,java,后端,xml,java-ee)