Spring复习第一天

今日目标

  • Spring是什么
  • Spring的核心
  • Spring的发展历程
  • Spring的体系结构
  • 程序的耦合和解耦
  • IOC概念和Spring中的IOC
  • Spring中基于XML的IOC环境搭建
  • 依赖注入 (Dependency Injection)

Spring

  • 分层的JavaSE/EE 轻量级开源框架

  • 以IoC(控制反转) AOP(面向切面编程) 为内核

  • 展现层 SpringMVC

  • 持久层 Spring JDBC/MyBatis

  • 整合 SSM

Spring的优势

  1. 方便解耦, 简化开发
  2. AOP编程支持
  3. 声明式事务的支持
  4. 程序测试的方便
  5. 可以集成各种优秀框架Struts, Hibernate, Hessian等
  6. 降低JavaEE API 的使用难度 对JDBC, JavaMail,远程调用难度降低

Spring 体系结构

Core Container 核心容器控制所有 IOC

耦合关系

传统jdbc连接如何解耦合

  1. 不使用new 而使用反射创建对象
  2. 对经常变的字符串 写在配置文件里

模块间的 接口 调用模块方式 传送数据

模块间 耦合 模块间的依赖关系 控制 , 调用 数据传递

  • 依赖关系
  • 耦合关系
    1. 类之间的依赖
    2. 方法之间的依赖
  • IOC(控制反转) 只能是解决程序间的耦合关系
  • 对象创建交给Spring处理
    基础

配置文件 获取要创建的对象的全限定名

读取配置文件的全限定名等信息
通过反射创建对象

Spring的IoC容器是Map类型的

有bean对象 怎么存放的呢

工厂模式

分工

BeanFactory

1. 定义静态代码块
Properties 读取配置文件 

2. 定义方法 返回对象 

public static Object getBean(String beanName){
    
    Object bean;
    
    try{
        String beanPath = 
        bean = Class.forName(全类名).newInstance();
        
    }catch(Exception e){
        
    }
}



Spring的使用

  1. Maven工程
  2. packaging 导入Jar坐标 GroupId, ArtifactId jar包的问题多了aop(基于注解的jar),jcl(把Apache的日志组件集成到这个jar里)
  3. spring-context 5.0.2.RESLEASE 不是简单的依赖
  4. Beans Core Context SpEL
  5. mysql 5.1.6
  6. bean.xml
  7. src/java/resource/bean.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">

    <!--把对象的创建交给spring来管理  id = 唯一标志 -->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>

    <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>
</beans>

  1. 获取核心容器对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
  1. 根据id获取Bean对象

IAccountService iaccountService = (IAccountService)applicationContext.getBean("accountService") 
// 此时获取的是Object类型的 强制转换成 IAccountService 

2. IAccountDao accountDao = applicationContext.getBean("accountDao",IAccountDao.class);
// 疑惑 用的是 接口的实现类啊 

ApplicationContext的三个常用实现类

    ClassPathXmlApplicationContext:
    加载类路径下的配置文件, 配置文件必须在类路径下,
    
    FileSystemXmlApplicationContext:
    加载磁盘任意路径的文件, 跟定绝对路径

    AnnotationConfigApplicationContext: 
    它可以用于读取注解创建容器 
    
    

核心容器的两个接口的问题

  • ApplicationContext 构建核心容器 立即加载创建对象的形式 读完配置文件 立即使用反射的方式创建对象 创建一次之后就不会再创建了适用与单例设计模式

  • BeanFactory 构建核心容器 延迟加载的方式创建对象,什么时候根据id获取对象,什么时候就创建对象
    适用于多例

创建Bean的三种方式

  1. 默认构造函数(无参构造)创建
  • 在Spring的配置文件中使用Bean标签,只设置id, class属性,这是使用默认构造函数创建对象,如果class指定类中没有默认构造无法创建对象 无参构造方法
  1. 使用普通工厂中的方法创建对象( 使用某个类中的方法创建对象,并存入容器)
    该工厂可能是jar包中的类

(使用工厂类中的方法创建对象,存入容器)

创建工厂对象 通过工厂对象 调用工厂里的方法得到需要的类的对象

  1. 模拟静态工厂类,使用class属性指定 (某个类中的静态方法创建对象)

创建 class指定类的对象,指定id的内容

创建 class 指定的对象 执行 factory-method 用id 取

bean的作用范围

bean标签的scope属性
取值

  • singleton 单例
  • prototype 多例
  • request 作用web应用的请求范围
  • session 会话范围
  • global-session 集群环境的会话范围

bean的生命周期

main 方法 程序的入口

多态看成自己 父 xx = new 子(); => 子 xx = new 子();

单例对象

  • 出生 容器创建时对象出生
  • 活着 容器在,对象活着
  • 死亡 容器销毁,对象就完了
  • 总结 单例对象的生命周期与容器相同

多例对象

  • 出生 使用对象时Spring创建
  • 活着 对象在使用就活着
  • 死亡 GC回收

Spring中的依赖注入

Dependency Injection

依赖关系交给Spring来维护Spring
IoC的作用:
降低程序间的耦合 依赖关系
编写程序 通过控制反转

当前类调用其他类的对象,有Spring给我们提供
依赖关系的管理:
Spring

管理依赖关系 依赖注入
依赖注入 三类 能注入的数据
基本类型 String
其他bean类型,在配置文件中配置过的bean类型

复杂类型/集合类型

注入的方式: 有三种
  • 第一种: 使用构造函数提供 constructor-arg
  • 第二种:使用setter方法提供
  • 第三种:使用注解提供

构造函数注入

可注入的变量 成员变量 数据类型
基本类型
其他bean类型

1. 类中定义可用的成员变量  经常变化的数据,不适用与注入的方式
2. set()方法

bean.xml中

<bean id="" class="">
        <constructor-arg type="java.lang.String">

        </constructor-arg>
</bean>

优点 : 注入数据是必须的操作

缺点 : 创建对象时,用不到的数据也必须提供

set方法注入

  • 只需要set方法

bean标签内部 标签

<bean id = "" class = "" >
    <property name ="xxx" value = "" ref ="">
    </property>
</bean>
  • name 指定注入时所调用的set方法名
  • value 提供数据
  • ref 指定其他类型的Bean 指 在springIoC中出现的bean对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值