问题描述
publicclassTest{publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlApplicationContext("com/sxt/test/beans.xml");UserDaouserdao=(UserDao)context.getBean("userDao");userdao.add("d","222");//System.out.print()}}请问,(UserDao)context.getBean("userDao"),是如何创建出UserDao对象的,我查看源码,为什么找不到:new()或者newInstance()呢?请大家指点,谢谢。
解决方案
解决方案二:
反射里面还可以通过构造方法创建对象。建议把日志输出级别调整为debug,看看是那些类和方法创建的bean,找到后直接看源代码或者抓断点调试一步一步de的跟踪
解决方案三:
一般情况下,在这句中ApplicationContextcontext=newClassPathXmlApplicationContext("com/sxt/test/beans.xml");userDao这个bean就被创建了。ApplicationContext实质上是一个beanFactory,它里面包含了一个map用来存储bean。执行上面那一句时,会先读取配置文件,再利用反射将所有的bean进行实例化,然后以bean的name作为key,实例化后的对象作为value存储进去beanFactory里的map,这样在后面调用时即可直接取出。SpringIOC简单过程是这样的。
解决方案四:
引用2楼wu244534279的回复:
一般情况下,在这句中ApplicationContextcontext=newClassPathXmlApplicationContext("com/sxt/test/beans.xml");userDao这个bean就被创建了。ApplicationContext实质上是一个beanFactory,它里面包含了一个map用来存储bean。执行上面那一句时,会先读取配置文件,再利用反射将所有的bean进行实例化,然后以bean的name作为key,实例化后的对象作为value存储进去beanFactory里的map,这样在后面调用时即可直接取出。SpringIOC简单过程是这样的。
正解~~
解决方案五:
工厂模式的。。。