栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring学习笔记-IOC(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring学习笔记-IOC(二)

序言

IOC配置(XML)

DI(依赖注入)

概念

DI与IOC之间的关联 

set注入(主流方式)

构造器注入(了解)

集合注入(5种)

properties文件

操作步骤

ApplicationContext


序言

Spring学习笔记-IOC(一)_Tensorflow-CSDN博客https://blog.csdn.net/weixin_43715214/article/details/123244453上述文章讲述了Spring-IOC中的XML配置的bean的部分,后序内容请见下文

bean(以讲)DIproperties文件ApplicationContext

IOC配置(XML)

DI(依赖注入)

概念

IoC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源

DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入

DI与IOC之间的关联 

应用程序依赖资源,Spring为其注入资源,应用程序不是依赖Spring,而是依赖Spring提供的资源

其实这两件事时在同一时间发生的,只是主、被动关系不同。

站在Spring容器的角度上来看,叫IOC;站在应用程序的角度上来看叫做DI。

DI依赖注入由两种方式——set注入、构造器注入

set注入(主流方式) set注入后面案例的源码

是Spring_demo02.zip的!

Spring示例代码: 根据黑马程序员的视频课,自己课后练习代码汇总,与本人CSDN文章相对应。https://gitee.com/li_chen_xin_TL/spring-sample-code.git名称是,是标签下的子标签,使用set方法的形式为bean提供资源

格式


    

案例代码-set注入示例

Dao层的实现类-UserDaoImpl

public class UserDaoImpl implements UserDao {

    public void save() {
        System.out.println("user dao running...");
    }
}

service层的实现类-UserServiceImpl

public class UserServiceImpl implements UserService {

    // 注入number (非引用类型)
    private int number;
    public void setNumber(int number) {
        this.number = number;
    }

    // 1.对需要注入的变量添加set注入
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("user service running" + number);
        userDao.save();
    }
}

配置文件applicationContext.xml




    
        
        
        
    

    
    

程序执行入口

public class UserApp {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) ctx.getBean("userService");
        userService.save();
    }
}

问题:spring 到底注入接口还是实现类? 

userDAO是个接口,private userDao userdao ,这种写法什么意思?接口不是不能被实例化的吗?_百度知道 (baidu.com)https://zhidao.baidu.com/question/1966330176031323940.html

spring注入接口还是实现类,同一接口有多个实现类,如何注入_q503385724的博客-CSDN博客_spring注入的是接口还是实现类https://blog.csdn.net/q503385724/article/details/87349369

构造器注入(了解) 构造器注入后面案例的源码

是Spring_demo03.zip中的!

Spring示例代码: 根据黑马程序员的视频课,自己课后练习代码汇总,与本人CSDN文章相对应。https://gitee.com/li_chen_xin_TL/spring-sample-code.git在set注入中,是通过属性值注入的,而在构造器注入中,是通过构造方法。

名称:constructor-arg

类型:标签

归属:bean标签

作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作

格式:

 
    

基本属性:  

ref:设定引用类型构造方法参数对应bean的id ,不能与value同时使用

type :设定构造方法参数的类型,用于按类型匹配参数或进行类型校验

index :设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数

注意:一个bean可以有多个constructor-arg标签  

案例代码-构造器注入示例

applicationContext.xml




    

    
        
        
        
    

UserServiceImpl实现类

public class UserServiceImpl implements UserService {

    private UserDao userDao;
    private int number;
    private int age;
    public UserServiceImpl(UserDao userDao,int number,int age ) {
        this.userDao = userDao;
        this.number = number;
        this.age = age;
    }

    public void save() {
        System.out.println("user service running" + " " + number + " " + age);
        userDao.save();
    }
}

UserApp

public class UserApp {
    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserService userService = (UserService) ctx.getBean("userService");

        userService.save();
    }
}

集合注入(5种)

名称:array,list,set,map,props

类型:标签

归属:property标签 或 constructor-arg标签

作用:注入集合数据类型属性

格式:


    

array

list

set

map

 

props

代码演示


    
        
            itheima
            66666
        
    

    
        
            itheima666
            666666
        
    

    
        
            123456
            66666
        
    

    
        
            itheima
            66666
        
    

    
        
            
            
        
    

properties文件

Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值

操作步骤

1.准备外部properties文件

2.开启context命名空间支持

http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd

3.加载指定的properties文件

4.使用加载的数据  

注意:如果需要加载所有的properties文件,可以使用*.properties表示加载所有的properties文件

注意:读取数据使用${propertiesName}格式进行,其中propertiesName指properties文件中的属性名

ApplicationContext

1.ApplicationContext是一个接口,提供了访问spring容器的API

2.ClassPathXmlApplicationContext是一个类,实现了上述功能

3.ApplicationContext的顶层接口是BeanFactory

4.BeanFactory定义了bean相关的最基本操作

5.ApplicationContext在BeanFactory基础上追加了若干新功能

对比BeanFactory

1.BeanFactory创建的bean采用延迟加载形式,使用才创建

2.ApplicationContext创建的bean默认采用立即加载形式

FileSystemXmlApplicationContext

可以加载文件系统中任意位置的配置文件,而ClassPathXmlApplicationContext只能加载类路径下的配置文件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755783.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号