直接上代码
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一块内存再注入