spring依赖注入的方式

依赖注入的方式:

这里有几个问题:

1.向一个类中传递参数有几种方式?

普通方法,构造方法

2.依赖注入描述了在容器中建立bean与bean之间的依赖关系的过程,如果bean运行需要的是数字或者字符串呢?

引用类型,简单类型(基本数据类型与string)

3.依赖注入方式

setter注入:

简单类型,引用类型

构造器注入

简单类型,引用类型。

setter注入前面的例子比如在Impl中

//set注入
rivate BookDao bookDao;
public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

再在配置文件中写好相应的bean 和ref。

注入简单的数据类型:

在类中先注入,private int connecetnumber;

public void setConnecetnumber(int connecetnumber) {
    this.connecetnumber = connecetnumber;
}
package Dao;

public class BookDaoImpl implements  BookDao{
private int connecetnumber;

    public void setConnecetnumber(int connecetnumber) {
        this.connecetnumber = connecetnumber;
    }

    public void save() {
        System.out.println("BookDaoImpl is running");

    }
    public void init(){

        System.out.println("init is runing");
    }
    public  void destory(){
        System.out.println("destory is runing");
    }
}

然后在配置文件中配置好:

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
    <!--1.导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->

    <!--2.配置bean-->
    <!--bean标签标示配置bean
    id属性标示给bean起名字
    class属性表示给bean定义类型-->
    <bean id="bookDao"   name= "bookDao1" class="Dao.BookDaoImpl"  init-method="init" destroy-method="destory" />
<property name ="connecetnumber" value="10"/>
</bean>
    <bean id="bookService" name="bookDaoService" class="Service.BookDaoServiceImpl">
        <!--7.配置server与dao的关系-->
        <!--property标签表示配置当前bean的属性
        name属性表示配置哪一个具体的属性
        ref属性表示参照哪一个bean-->
        <!-- name后面的bookDao指的是BookDaoServiceImol里面的bookDao ref后面的bookDao是一个bean注入到另外一个bean里面 -->
        <property name="bookDao" ref="bookDao1"/>
    </bean>

</beans>

构造器注入:

其实与setter注入很像

package Service;

import Dao.BookDao;
import Dao.BookDaoImpl;

public class BookDaoServiceImpl  implements BookDaoService {

  //删除使用new的方式
    private BookDao bookDao;


    public void save() {
        bookDao.save();
        System.out.println("service is running ");
    }
//构造方法

    public BookDaoServiceImpl(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

配置文件:

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
    
    <bean id="bookDao"    class="Dao.BookDaoImpl"   />


    <bean id="bookService"  class="Service.BookDaoServiceImpl">
      
     <constructor-arg name="bookDao " ref="bookDao"/>
    </bean>

</beans>

依赖注入的选择方式:

1.强制依赖使用构造器注入,使用setter注入有概率不进行注入导致null对象出现

2.可依赖选择使用setter注入进行,灵活性强

3.spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨。

4.如果有必要可以两者可以同时使用,使用构造器注入完成强制依赖的注入,使用setter注入可完成可选依赖的注入。

5.实际开发过程中还根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入。

6.自己开发的模块推荐使用setter注入。

自动装配:

在配置文件中,bean标签中写入autowire 即可。就不用手动了。分为根据类型装配,根据名字装配。按照名字装配BookDaoServiceImpl中,setter注入不能少且bean的id必须与setter方法的名字 去掉set将首字母大写变成小写一样。

ackage Service;

import Dao.BookDao;
import Dao.BookDaoImpl;

public class BookDaoServiceImpl  implements BookDaoService {

  //删除使用new的方式
    private BookDao bookDao;


    public void save() {
        bookDao.save();
        System.out.println("service is running ");
    }



    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
 
    <bean id="bookDao"    class="Dao.BookDaoImpl"   />


    <bean id="bookService"  class="Service.BookDaoServiceImpl" autowire="byName">
     
        <!--还可以使用byType-->


    </bean>

</beans>

注意事项:

1.自动装配用于引用类型依赖注入,不能对简单类型进行操作。

2.使用类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用

3.使用按名装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用。

4.自动装配优先级低于setter注入与构造器注入,同时出现,自动装配配置失效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值