发表于: 2017-07-30 16:57:49

3 894


今天做的事:

昨天听了师兄和我讲的Spring的自动装配,今天就动手实现一下

先框架

首先是配置文件beans.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"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
   <bean id="user" class="com.entity.User"/>
   <bean id="iUser" class="com.dao.IUserImpl">
       <property name="user" ref="user"/>
   </bean>
   <bean id="userService" class="com.service.UserServiceImpl">
       <property name="iUser" ref="iUser"/>
   </bean>
</beans>


首先,在装配bean的时候,比如装配IUser时,IUserImpl和user之间是有依赖的,这时有依赖关系表明,IUserImpl里必须要有user对应类的属性,就是IUserImpl是包含User的。

除了以上这个要求,还要求在IUser中有User的setter方法,否则装配不上,如下图

可以看到报红了,这是因为缺少setter方法,bean无法注入。

但是使用@Autowired注解可以将setter方法去掉,但是为什么我上面的报红了呢

因为在配置文件中缺少了

<!--组件扫描-->
<context:component-scan base-package="com"/>

这个标签可以自动扫描相关包中的所有注解,这时@Autowired就可用了,这就注解的自动注入,之前的事setter方法自动注入。

那我不使用这个标签可不可以,答案是可以,但是需要加入另一个bean

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入


而property的name属性名不是什么值都可以,有特定的要求。暂时还不清楚具体和什么有关,只是IDEA有相关提示,根据提示即可。


然后,使用Spring自动注入的时候,需要先和配置文件建立连接,然后通过getbean()方法获取bean,如下

圈住部分对应配置文件中的bean标签的id,就可以通过Spring装配这个类,而不用自己手动new。


上面两行连接的代码可以使用如下一行代码替换


如果不和配置文件建立连接,直接想自动装配,会报错

这个错误提示有几种情况

字符串变量未初始化;

接口类型的对象没有用具体的类初始化。

可见我们没有自动装配成功,必须要和配置文件做关联。

这个和配置文件的关联就是Spring容器的初始化。


到这里,对Spring的配置文件已经有了简单了解了,对于Spring的自动装配也运用的还可以了。

至此,对于Spring的IOC终于获得比较清楚的认识。





返回列表 返回列表
评论

    分享到