Sping学习笔记——3.依赖注入

Spring学习笔记

三、依赖注入

1.手动注入
1.1 构造器注入

这种方法不常用,首先在类中写好一个构造方法

public BookDaoImpl(String name, String author, int price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

然后在xml中使用constructor-arg标签进行配置

<bean name="book" class="love.ceyx.dao.Impl.BookDaoImpl">
            <constructor-arg name="author" value="张三"/>
            <constructor-arg name="name" value="刑法大全"/>
            <constructor-arg name="price" value="10000"/>
        </bean>

注意,如果是引用数据类型,那么需要把value替换成ref去绑定类型。
这里的name属性对应的值需要跟构造器中形参的名字一样,耦合度较高。另外还有两种方法
一是使用type属性去指定参数的类型,让其按照类型匹配,但是仅适用于传入的参数类型各不相同,如果有两个相同的类型,这种方法就行不通。

<constructor-arg type="java.lang.String" value="张三"/>

二是按照顺序匹配,使用index属性指定参数在形参列表中的顺序,如:

<constructor-arg index="0" value="刑法大全"/>
1.2 setter注入

此方法较为便捷,且耦合度较低,首先类中需要给依赖定义一个setter

public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

然后配置文件使用property标签

<bean name="bookService" class="love.ceyx.service.Impl.BookServiceImpl">
            <property name="bookDao" ref="book"/>
        </bean>

注意name对应的值是依赖的setter方法中形参的名字。

2. 自动注入

自动注入最为简单快捷,但只能用于引用数据类型的依赖,而不能用于基本数据类型。
自动注入有几种模式,byName、byType、constructor、default和no,前两个较为常用,defaut和no都是不启用。自动注入不能和手动注入混用。

2.1 byName

byName与setter注入相似,都是按照setter的形参列表名匹配。

<bean id="book" class="love.ceyx.dao.Impl.BookDaoImpl">
            <constructor-arg type="java.lang.String" value="张三"/>
            <constructor-arg index="0" value="刑法大全"/>
            <constructor-arg name="price" value="10000"/>
        </bean>
        <bean name="bookService" class="love.ceyx.service.Impl.BookServiceImpl" autowire="byName">

形参列表中的名字需要与依赖的id一致

2.2 byType

把autowire的值替换成byType即可,按照形参列表中类型去匹配,注意xml文件中如果有两个bean的class相同,就会发生冲突(一般没人这样写),这种方式最为便捷和常用。

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值