这是dao层的时候给的一个注入测试。
@Resource(name = "sqlSessionFactory")
private SqlSessionFactory factory;
private SqlSession session = factory.openSession();
在配置文件中
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:config/mybatisConfig.xml"></property>
</bean> <context:component-scan base-package="pers.yida.shopping">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
debug的时候,在daoimpl注入的时候,factory注入的是一个null,报错提示空指针,debug流程是在spring读取配置文件并进行注入的时候报错。
错误提示:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pers.yida.shopping.dao.impl.daoImpl]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1102)
... 35 more
Caused by: java.lang.NullPointerException
at pers.yida.shopping.dao.impl.daoImpl.<init>(daoImpl.java:23)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
... 37 more所以想问一下spring ioc的流程,还有配置文件中的bean顺序是否影响注入,因为在之前的测试中,将sqlSessionFactory 的 bean写在扫描的后面就提示无法找到bean id="sqlSessionFactory"。
总结提问:IOC的注入流程,包括注解bean的注入,以及xml文件中的bean顺序是否会影响注入?

解决方案 »

  1.   

    我记得我老师说顺序是无影响的,bean跨xml都没问题。
      

  2.   

    我这边问的人也是说没有影响,所以我认为有可能是在spring的控制实体类初始化的时候,并没有将bean对象实体化,应该是spring实体类创建完之后,bean类才被创建,然后再去调用,所以在初始化的时候会是一个null。
    我也不知道这个理解对不对,所以想问问ioc的整个详细流程。