Spring配置文件注入后访问被注入的变量问题

直接上代码
1.Class OneClass

public class OneClass {
    String s;

    public void setS(String s) {
        this.s = s;
    }
}

2.Class Demo

public class Demo {
    OneClass oneClass;

    public void setOneClass(OneClass oneClass) {
        this.oneClass = oneClass;
    }

    {
        System.out.println(oneClass);
    }

    public void method(){
        System.out.println(oneClass.s);
    }

}

3.Class Test2

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
   public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("applic.xml");
        Demo demo = (Demo) app.getBean("demo");
        demo.method();
    }
}

4.配置文件xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="one" class="com.project.OneClass">
        <property name="s" value="asdfgh"></property>
    </bean>

    <bean id="demo" class="com.project.Demo">
        <property name="oneClass" ref="one"></property>
    </bean>

</beans>

思路:建一个OneClass类, 它有一个成员变量s, 我将在xml配置文件中为s注入数据"asdfgh", 详见配置文件.
建一个Demo类, 它有成员变量OneClass对象, 我也在配置文件中将上一个OneClass实例注入, Demo类中一个静态代码块,一个方法,都打印OneClass对象, 在测试Teste2中测试, 结果如下:

D:\work\install\Jdk1.8\bin\java.exe "-javaagent:D:\work\install\IntelliJ IDEA 2018.2.2\lib\idea_rt.jar=50334:D:\work\install\IntelliJ IDEA 2018.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\work\install\Jdk1.8\jre\lib\charsets.jar;D:\work\install\Jdk1.8\jre\lib\deploy.jar;D:\work\install\Jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\work\install\Jdk1.8\jre\lib\ext\cldrdata.jar;D:\work\install\Jdk1.8\jre\lib\ext\dnsns.jar;D:\work\install\Jdk1.8\jre\lib\ext\jaccess.jar;D:\work\install\Jdk1.8\jre\lib\ext\jfxrt.jar;D:\work\install\Jdk1.8\jre\lib\ext\localedata.jar;D:\work\install\Jdk1.8\jre\lib\ext\nashorn.jar;D:\work\install\Jdk1.8\jre\lib\ext\sunec.jar;D:\work\install\Jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\work\install\Jdk1.8\jre\lib\ext\sunmscapi.jar;D:\work\install\Jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\work\install\Jdk1.8\jre\lib\ext\zipfs.jar;D:\work\install\Jdk1.8\jre\lib\javaws.jar;D:\work\install\Jdk1.8\jre\lib\jce.jar;D:\work\install\Jdk1.8\jre\lib\jfr.jar;D:\work\install\Jdk1.8\jre\lib\jfxswt.jar;D:\work\install\Jdk1.8\jre\lib\jsse.jar;D:\work\install\Jdk1.8\jre\lib\management-agent.jar;D:\work\install\Jdk1.8\jre\lib\plugin.jar;D:\work\install\Jdk1.8\jre\lib\resources.jar;D:\work\install\Jdk1.8\jre\lib\rt.jar;D:\workspace\autumn\bbq\target\classes;D:\work\install\maven_libs\maven_repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-context\5.0.5.RELEASE\spring-context-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-aop\5.0.5.RELEASE\spring-aop-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-beans\5.0.5.RELEASE\spring-beans-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-core\5.0.5.RELEASE\spring-core-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-jcl\5.0.5.RELEASE\spring-jcl-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-expression\5.0.5.RELEASE\spring-expression-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-jdbc\5.0.5.RELEASE\spring-jdbc-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-tx\5.0.5.RELEASE\spring-tx-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\c3p0\c3p0\0.9.1.2\c3p0-0.9.1.2.jar;D:\work\install\maven_libs\maven_repository\org\springframework\spring-test\5.0.5.RELEASE\spring-test-5.0.5.RELEASE.jar;D:\work\install\maven_libs\maven_repository\junit\junit\4.12\junit-4.12.jar;D:\work\install\maven_libs\maven_repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar com.itheima.Test2
九月 07, 2019 10:14:41 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6477463f: startup date [Sat Sep 07 10:14:41 CST 2019]; root of context hierarchy
九月 07, 2019 10:14:41 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applic.xml]
静态代码块打印结果:null
方法中打印结果:asdfgh

Process finished with exit code 0

结论:Spring配置文件注入中,在被注入类成员位置无法访问注入结果,而方法中访问没毛病;
这和Spring底层有关,他的注入标志引用可能是标记在了方法上, 也可能注入时原理是对原变量copy一块内存再注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值