依赖注入方式

 setter注入:

               一、 简单类型:

                    1.提供对应的set方法

public class BookDaoImpl implements BookDao {

public  String databaseName;
    public  int num;

    public void setDatabaseName(String databaseName) {
        this.databaseName = databaseName;
    }

    public void setNum(int num) {
        this.num = num;
    }



    public void save() {
        System.out.println("BookDao save!"+databaseName+num);
    }


}

                2,配置value

 <bean  id= "bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <property name="databaseName" value="mysql"></property>
        <property name="num" value="10"></property>
    </bean>

           二、  引用类型:

                        1.提供对应的set方法

                         2.配置url

 

构造器注入:

                  简单类型

1.construct

public class BookDaoImpl implements BookDao {

public  String databaseName;
    public  int num;

    public BookDaoImpl(String databaseName, int num) {
        this.databaseName = databaseName;
        this.num = num;
    }

    
    public void save() {
        System.out.println("BookDao save!"+databaseName+num);
    }


}

 2.配置

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
     <constructor-arg name="databaseName" value="mysql"></constructor-arg>
        <constructor-arg name="num" value="10"></constructor-arg>
    </bean>

由于name表示的是形参的名字

通过以下方法减少耦合度

1.使用type

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
     <constructor-arg type="java.lang.String" value="mysql"></constructor-arg>
        <constructor-arg type="int" value="10"></constructor-arg>
    </bean>

2.使用index

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
     <constructor-arg index="0" value="mysql"></constructor-arg>
        <constructor-arg index="1" value="10"></constructor-arg>
    </bean>

                  引用类型

1.

public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {


    private BookDao bookDao ;

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

2.配置

name是BooServiceImpl构造方法中的形参名字

    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg  name="bookDao" ref="bookDao"/>
    </bean>

依赖注入方式选择

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

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

3.Spring框架倡导使用构造器

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

5.实际开发中,如果受控对象没有提供setter方法就必须使用构造器注入

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

依赖自动装配

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

  • 按类型:推荐使用,必须保证容器相同类型的bean唯一
  • 按名称    
  • 按构造方法
  • 不启用自动装配

1.还需要使用setter方法

public class BookServiceImpl implements BookService {

    private  BookDao bookDao;

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

    public void save() {
        System.out.println("BookService Save!");
        bookDao.save();
        
    }


}

2.配置


    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>

3.运行

public static void main(String[] args) {

        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        BookService bookService = (BookService) applicationContext.getBean("BookService");
        bookService.save();
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值