Spring 基于XML的DI

例如以下类:

teanDao是没有new的,所以直接用的时候会报空指针异常,所以再Spring自动创建该Service的时候要给teamDao注入,也就是赋值吧。

因为TeamDao这个对象是要用的,所以这个对象也是要创建的,但是要在创建TeamService的时候将该Service中的teamDao赋值让其使用。

除了通过构造方法注入属性值外,都需要service中有对应的set函数,来给对应的teamDao添加属性值。

public class TeamService {
    private TeamDao teamDao;

    public TeamService() {
    }

    public TeamService(TeamDao teamDao) {
        this.teamDao = teamDao;
    }

    public void setTeamDao(TeamDao teamDao) {
        System.out.println("TeamService set teamDao" );
        this.teamDao = teamDao;
    }

    public void add() {
        teamDao.add();
        System.out.println("TeamService0---add");
    }
}

1、通过set方法

通过property标签可以将teamDao注入到service中的变量名为name值的变量,注入的就是ref对应的beanid。

前提是TeamService中set方法。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>
<bean id="teamService" class="com.AE.service.TeamService" >
        <!-- 1、使用set方法注入属性值 -->
        <property name="teamDao" ref="teamDao"></property>
</bean>

2、通过构造方法

跟上一个是差不多的,只是实现方式不一样而已。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>
<bean id="teamService1" class="com.AE.service.TeamService" >
        <!-- 2、使用构造方法注入属性值 -->
        <constructor-arg name="teamDao" ref="teamDao"></constructor-arg>
</bean>

3、自动注入

通过autowire属性进行设置。

前提是TeamService中set方法。

3.1、byName

就比如该service中定义使用的类名是teamDao,就会查找Spring创建的类中id对应的,就是根据定义名进行查找。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService2" class="com.AE.service.TeamService" autowire="byName">
        <!-- 3.1、按名称自动注入 -->
</bean>

3.2、byType

跟byName差不多,区别是根据类型去查找的,即使创建对象的时候不是对应的teamDao,也可以使用,问题就是假如XML中有同时创建了两个类都是TeamDao,这时候通过类型去查找就会报错,因为有两个,spring不知道用哪个。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService3" class="com.AE.service.TeamService" autowire="byType">
        <!-- 3.2、按类型自动注入 -->
</bean>

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?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:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="addr" class="cn.sxt.vo.Address"> <property name="address" value="北京西三旗"/> </bean> <bean id="student" class="cn.sxt.vo.Student"> <property name="name" value="张三丰"></property> <property name="addr" ref="addr"/> <property name="books"> <array> <value>傲慢与偏见</value> <value>巴黎圣母院</value> <value>仲夏夜之梦</value> </array> </property> <property name="hobbies"> <list> <value>羽毛球</value> <value>乒乓球</value> <value>玻璃球</value> <value>溜溜球</value> </list> </property> <property name="cards"> <map> <entry key="交通银行" value="20200302"></entry> <entry> <key> <value>中信银行</value> </key> <value>6222620222266667</value> </entry> </map> </property> <property name="games"> <set> <value>lol</value> <value>第五人格</value> <value>王者荣耀</value> <value>五子棋</value> </set> </property> <property name="wife"> <null/> </property> <property name="info"> <props> <prop key="学号">20160233</prop> <prop key="sex">女</prop> <prop key="name">小球</prop> </props> </property> </bean> <!-- p命名空间注入属性依然要设置set方法 --> <bean id="user" class="cn.sxt.vo.User" p:name="风清扬" p:age="230"/> <!--c命名空间注入要求有对应参数的构造方法 --> <bean id="u1" class="cn.sxt.vo.User" c:name="Lynn" c:age="18"/> </beans>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值