Spring 的DI 依赖注入

UserDao.java

package com.atguigu.Ioc_02;

public class UserDao {
}

UserService.java

package com.atguigu.Ioc_02;

public class UserService {
    private UserDao userDao;

    private int age;
    private String name;

    public UserService(UserDao userDao){
        this.userDao = userDao;
    }

    public UserService(int age, String name, UserDao userDao){
        this.age = age;
        this.name = name;
        this.userDao = userDao;
    }
}

MovieFinder.java

package com.atguigu.Ioc_02;

public class MovieFinder {
}

SimpleMovieLister.java

package com.atguigu.Ioc_02;

public class SimpleMovieLister {
    private MovieFinder movieFinder;

    private String movieName;

    public void setMovieFinder(MovieFinder movieFinder){
        this.movieFinder = movieFinder;
    }

    public void setMovieName(String movieName){
        this.movieName = movieName;
    }
}

resources文件夹下的 xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    引用 和 被引用的组件,必须全部在Ioc容器中,不能乡愁

 	springIoc是一个高级容器,内部会有缓存动作,
         1、先创建对象(Ioc)
         2、再进行属性赋值(DI)


    1、单个构造函数参数注入
    <bean id="userDao" class="com.atguigu.Ioc_02.UserDao" />
    <bean id="userService" class="com.atguigu.Ioc_02.UserService">
        <!--
            <constructor-arg:构造函数传值 DI的配置
                value = 直接属性值(String name = "二狗子",int age = 18)
                ref = 其他bean的Id
        -->
        <constructor-arg ref="userDao"/>
    </bean>

    2、多个构造函数参数注入
    <bean id="userService1" class="com.atguigu.Ioc_02.UserService">
        方案1:按照,构造函数参数的顺序,填写值
        <constructor-arg value="18"/>
        <constructor-arg value="二狗子"/>
        <constructor-arg ref="userDao"/>
    </bean>

    <bean id="userService2" class="com.atguigu.Ioc_02.UserService">
        方案2:按照,构造函数参数的名字(name=构造参数的参数名),填写值
        <constructor-arg name="age" value="18"/>
        <constructor-arg name="name" value="二狗子"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

    <bean id="userService3" class="com.atguigu.Ioc_02.UserService">
        方案3:按照,构造函数参数的下角标(从左到右,从0开始),填写值
                因为,public UserService(int age, String name, UserDao userDao)
                所以,age的下角标是0,name的下角标是1,userDao的下角标是2
        <constructor-arg index="0" value="18"/>
        <constructor-arg index="1" value="二狗子"/>
        <constructor-arg index="2" ref="userDao"/>
    </bean>

    3、触发setter方法,进行依赖注入
    <bean id="movieFinder" class="com.atguigu.Ioc_02.MovieFinder"/>
    <bean id="simpleMovieLister" class="com.atguigu.Ioc_02.SimpleMovieLister">
        name: 属性名(setter方法的 去掉“set”和首字母小写的值)
                如:public void setMovieFinder(MovieFinder movieFinder)
                此时,name = movieFinder

             value=“直接属性值” 和 ref=“其他bean的Id”,
             value、ref这两二选一
        <property name="movieFinder" ref="movieFinder"></property>
        <property name="movieName" value="西红柿首富"></property>
    </bean>


</beans>

相关推荐

  1. Spring DI 依赖注入

    2024-03-29 16:30:02       46 阅读
  2. 3.Spring-依赖注入DI

    2024-03-29 16:30:02       38 阅读
  3. Spring依赖注入

    2024-03-29 16:30:02       33 阅读
  4. SpringIoC(控制反转)和 DI依赖注入

    2024-03-29 16:30:02       42 阅读
  5. spring依赖注入

    2024-03-29 16:30:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 16:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 16:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 16:30:02       82 阅读
  4. Python语言-面向对象

    2024-03-29 16:30:02       91 阅读

热门阅读

  1. Linux Crontab定时表教学大全(一看就会!)

    2024-03-29 16:30:02       47 阅读
  2. 如何避免过度设计

    2024-03-29 16:30:02       52 阅读
  3. SparkSQL异常数据清洗API

    2024-03-29 16:30:02       47 阅读
  4. CentOS7.x 上安装并配置 MySQL 8.x

    2024-03-29 16:30:02       43 阅读
  5. 小程序配置服务器域名

    2024-03-29 16:30:02       53 阅读
  6. 构建docker环境下的thunder迅雷插件

    2024-03-29 16:30:02       49 阅读
  7. C#——系统学习(类与对象)

    2024-03-29 16:30:02       42 阅读
  8. 笔记82:关于 C++ 中的 swap 函数

    2024-03-29 16:30:02       40 阅读
  9. SQL中如何添加数据【保姆】

    2024-03-29 16:30:02       36 阅读