Spring(三、依赖注入、自动装配、管理第三方Bean

一、依赖注入

依赖注入分为两大块,每块对应简单类型和引用类型的注入

  • setter注入
    • 简单类型
    • 引用类型
  • 构造器注入
    • 简单类型
    • 引用类型 

1.1、setter注入引用类型、简单类型

1,在bean中定义引用类型属性并提供set方法 

import dao.BookDao;
import service.BookService;

public class BookServiceImp implements BookService {
    private BookDao bookDao;


    @Override
    public void save() {
        System.out.println("人家是Service啦~~~~");
        bookDao.save();
    }

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

2,配置中使用property标签的ref属性注入引用类型,value注入简单类型

    <bean id="bookDaoId" name = "bookDao,bd" class="dao.impl.BookDaoImp" scope="prototype" />

    <bean id="bookService" class="service.impl.BookServiceImp" scope="prototype">
        <property name="bookDao" ref="bd" />
    </bean>

ref:容器中的bean的标识(id)

name:被注入类的set方法,去掉set后首字母小写。比如setBookDao为bookdao

注入简单类型同上,将ref修改为value即可

<property name="同上" value="注入值" />

 

1.2、构造器注入引用类型、简单类型 

1,在bean中定义属性并提供构造方法


public class BookServiceImpl implements BookService {
    private BookDao bookDao;
    private String easyType;

    //构造注入


    public BookServiceImpl(BookDao bookDao,String easyType) {
        //引用类型
        this.bookDao = bookDao;
        //简单类型
        this.easyType = easyType;
    }

    public BookServiceImpl() {
        System.out.println("我是Service,我被生成咯~~~~~~~~~");
    }

    @Override
    public void save() {
        System.out.println("人家是Service啦~~~~~~~~~");
        bookDao.save();
    }


}

 2,配置中使用constrctor-arg标签的ref属性注入引用类型,value注入简单类型

    <bean id = "fromBookDao" name= "bookDao,bd;b1" class="com.brrbaii.dao.daoImpl.BookDaoImpl"/>

<!--    <bean id = "orderDao" class="com.brrbaii.factory.OrderDaoFacatory" factory-method="getOrderDaoImpl"  />-->

    <bean id = "bookService" class="com.brrbaii.service.serviceImpl.BookServiceImpl" >
        <!--
            name:具体要配置的一个属性
            ref:参照哪一个Bean
            这里表示的是:我们要配置bookService里创建的bookDao对象,而这个对象来自于Bean里的fromBookDao
            value:值
        -->
        <!--注入引用类型-->
        <constructor-arg name = "bookDao" ref = "fromBookDao" />
        <!--注入简答类型-->
        <constructor-arg name = "easyType" value = "123" />

    </bean>

 

二、自动装配 

IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean的过程称为自动装配 

自动装配方式: 

  • 按类型(autowire="byName")
  • 按名称
  • 按构造方法
  • 不启用

按类型 :

<!--自动装配(按类型)-->
<bean id = "bookService" class="com.brrbaii.service.serviceImpl.BookServiceImpl" autowire="byType" />

注意:
        需要在bean中提供setter方法,提供的类型要唯一

按名称: 

 <!--自动装配(按名称)--> <bean id = "bookService" class="com.brrbaii.service.serviceImpl.BookServiceImpl" autowire="byName" />

注意:
        容器中注册的bean的id需要和bean中引用的属性名相同

自动装配特征:

  • 自动装配用于引用类型依赖注入,不能注入简单类型
  • 按类型装配(byType)必须保证容器中相同类型的bean唯一
  • 按名称装配(byName)必须保证容器中具有指定名称的bean,变量名与配置耦合,不推荐
  • 自动装配优先级低于setter注入和构造器注入,上述两种同时出现时自动装配失效 

三、管理第三方bean

这里管理Druid数据源作为示范

1,添加依赖

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>

2,创建db.properties

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/brrbaii?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username = root
password = 123456

3,开启context命名空间

<?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"
>

4,在容器中引入properties文件

<context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>

5,配置Druid连接池

    <!--Druid连接池-->
    <bean id = "dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
    </bean>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值