-控制反转:削减 (降低)依赖 ----》IOC的xml配置

通过 2种创建对象的方式 来 理解 IOC

传统的 创建------.
直接new: 有自主 的 ----会消耗更多的
明显的依赖关系
APP–1资源- APP-2资源- APP–3资源- APP–4资源
IOC-----》通过工厂----》获取 资源的
你可以在 你的类里 既可以 new到 也可以 用工厂 去做===把控制器 交给 框架 或工厂
自己做 也可以让 框架 或 工厂来做
》 控制 反转---------》更切近 面对象思想!

将创建对象的权利 交给工厂Factory
用工厂来 创建对象—》由BeanFactory----是根据 (无法自主 控制)
获取: 通过key 来确定

强调的一点 IOC
并不能实现数据库的增删改查 也不能 表现层的 请求参数封装 也无法接受请求
那么IOC 的解耦 有多大的功能 ????
— IOC ----》就是解耦 与 减低程序的 依赖关系

–ioc的概念和作用-------------------------》 开发包===》

Spring的源码里 -------------》
dist —》libs :里jar包 copy是没有任何后缀的
sources----》源码
有注释—《就是关联 了》
AOP 文档要解压就行 ----》
maven项目 直接就坐标
在 右上角 要记得收藏

首先

—spring中的Ioc前期准备--------------------------》

Spring 的dest :开发包 在 资料里 源码里 ----》
docs : n. 说明文件;文献 API
SpringFramwork-reference======》我们找的是的名为 :index.html 文件的
用浏览器 打开 加上你的浏览器的 收藏-----》Spring的都是英文的

libs:-----jar包 63个每3个一组 其实就21个 —》没有后缀的文件
源码在sources----》源码
schema:概要----》里有xml 的约束
-------------我的 F盘里的 ----路径
F:\32web\day34_Spring_Importance\spring_day01\资料/spring-framework-5.0.2.RELEASE-dist/spring-framework-5.0.2.RELEASE/docs/spring-framework-
reference/core.html#spring-core
*


—spring基于XML的IOC环境搭建和入门-------------------》

截取的 Spring框架文档

版本5.0.2.RELEASE
欢迎使用Spring Framework参考文档!

请阅读概述以获得快速介绍,包括简要历史,设计理念,提问问题以及入门提示。有关“什么是新的”或“从以前的版本迁移”的信息,请查看 Github Wiki。

参考文档分为几个部分:

核心
IoC容器,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。

测试
模拟对象,TestContext框架,Spring MVC测试,WebTestClient。

数据访问
事务,DAO支持,JDBC,ORM,编组XML。

Web Servlet
Spring MVC,WebSocket,SockJS,STOMP消息传递。

网络反应
Spring WebFlux,WebClient,WebSocket。

积分
远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。

语言
Kotlin,Groovy,动态语言。

版本5.0.2.RELEASE
上次更新2017-11-27 10:24:45 UTC
0–

–我们点击核心 core:的界面

Ctrl+F—>输入:xmlns 就速到我们要配置xml 的约束文件

<bean id="accountService" class="com.fhw.service.impl.IAccountServiceImpl"></bean>


我们就把Spring的那个map容器获取到
{

   //获取 spring 的核心容器对象:  参数就是 bean.xml
    ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
    IAcconutService as = (IAcconutService)ac.getBean("accountService");
    IAccountDao adao=ac.getBean("accountDao",IAccountDao.class);
    System.out.println(as);
    System.out.println(adao);

-----bean.xml里的配置

<?xml version="1.0" encoding="UTF-8"?>






编写 过程-----------------------------------------------》
id="accountService"的自己起个名称
class="com.fhw.service.impl.IAccountServiceImpl: 具体些的时候P编辑器 有 提示

dao 与Service 的代码 与上一个:一样的

测试类里的 -----------》

package com.fhw.ui;

import com.fhw.dao.IAccountDao;
import com.fhw.service.IAcconutService;
import com.fhw.service.impl.IAccountServiceImpl;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/在模拟一个表现层 调用业务层 (实际里这里就是一个 servlet)/
public class Client {
/**
* 获取 spring 的核心容器 根据id 获取对象
* @param args
*/
public static void main(String[] args) {

   //获取 spring 的核心容器对象 有3个:其中2个 :

    // 3:AnnotationConfigApplication:  注解开发
   /* ApplicationContext fsxac = new FileSystemXmlApplicationContext("D:\\develop\\SpringStudy\\SpringEditCode\\fhw01_03spring_ioc\\src\\main\\resources\\bean.xml");
    IAcconutService as_fsxac = (IAcconutService)fsxac.getBean("accountService");
    System.out.println("第2种:FilSystemxmlApplicationContext:加载磁盘限定额配置文件"+as_fsxac+"------------------------");
    IAcconutService as = (IAcconutService)ac.getBean("accountService");
    IAccountDao adao=ac.getBean("accountDao",IAccountDao.class);
    System.out.println(as);
    System.out.println(adao);*/
    // as.saveAccount();
    /*-核心容器 的两个接口 的加载问题 ApplicationContext----》立即加载
     BeanFactory -----》延迟加载 的 用的时候再加载
    立即加载 ---》常规的 方式
    ------ BeanFactory  用的是过时方法来验证 debug测试 创建的-------
    *    */
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");

// BeanFactory factory = new XmlBeanFactory(resource);
IAcconutService as = (IAcconutService)ac.getBean(“accountService”);
as.saveAccount();

   ac.close();

}

}

—ApplicationContext的三个实现类-------------------》

我们在 IDEA编辑器 里
找寻接口的实现类====鼠标 右键 点击选中 — Diagrams —shou Diagrams得到 继承图
再 点击 shou implementestion :实现类
再 点击 shou Parentes :父接口
获取spring 的核心容器 Application 具体的实现类 有3个

ApplicationContext的

1: ClassPathXmlApplicationContext:加载类路径 下的配置文件 没有 就异常
类路径: 类路径 上和 web 项目一致
2:FilSystemxmlApplicationContext:加载磁盘限定额配置文件 (需要访问权限)—》接到对 方的 显然 硬盘不可移动的局限 (虽然只可以在本机里 放到 任意 本机 地方

但是 不认识程序 的人把这个删了 就完蛋了):
3:AnnotationConfigApplication: 注解开发

----BeanFactory(延迟)和ApplicationContext的(立即 )区别 — 加载 -----------------》

ApplicationContext: 他在创建容器的 立即加载 的创建对象----》当前配置文件 就创建相关的对象
测试:加上构造函数 sout 以个对象创建了
找到工厂的 配置文件
然可以 使用
BeanFavtory 使用的了 延迟加载 的 方式
‘’
需求: 延迟加载的 单例模式 思想--------

–spring中bean的细节之作用范围-------------------------》

在这里插入图片描述
bean 默认是:单例
bean的scope属性的范围
取值 1: singleton :单例:(默认)
2:prototype:多例:
3:request----一次请求web应用
4: session—一次会话
5:全局的global-sessionc
看做一个Session 一次会话:global-sessionc

描述 一下 global 的使用场景:

从浏览器里 到服务器 之间通过网址来 登录服务器 有多台服务器 都有义务 闲置的服务器会为你服务 :你的请求 在浏览器被保存 在Cookie里 在服务器 里 被保存在

session里 比如: 用户名 密码 验证码 : 其中验证码 :你这次登录的信息 当你下次登录的时候 的服务器 (服务器是异步 服务的) 会无法登录 这在 global session

的 里面 就会 将你 初次的信息让所有服务器共享 确保你信息 就可以继续登录

负载均衡----》靠软件 绝对没有硬件的的好

—spring中bean的细节之生命周期----单例 与 多例--------------》
单例: 容器创建–》立即(加载)创建 随着 容器销毁
多例: 调用获取对象的时候 ----GC机制
Spring不知道他不会------》待 --java的GC 机制
Bean 标签中属性:
init : 在javaBean对象销毁的时候 执行该属性

总结:IOC 是控制反转

spring的依赖注入 DI------------------》
依赖注入 D I: 创建对象 赋值交给框架来处理管理

猜你喜欢

转载自blog.csdn.net/qq_41934719/article/details/84646506