发表于: 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终于获得比较清楚的认识。
评论