Spring框架

- 怎么学框架

  1. 知道框架能做什么

  2. 框架的语法

  3. 会用后 以后在考虑内部实现

  4. 通过以上步骤 可以自己实现一个框架

一、概述

1. 框架是什么

  • Spring 是一个容器 管理对象,属性赋值,底层使用反射机制

  • 主要是解决企业开发难度

  • 模块之间,类之间的管理解耦合 解决对象之间的关系

  • 核心技术 ioc aop

2. 优点

  • 轻量

  • 针对接口编程 解耦合

  • 支持AOP 面向切面编程

  • 方便集成其他框架 像插座

    3. Spring体系结构

    数据访问 Web AOP 集成 容器 测试

     

二、 IOC控制反转

1. 为什么使用IOC:

目的减少代码的改动,也能实现不同功能 解耦合

2. IOC(控制反转)是一个思想。

  • 控制:对象的创建,赋值,对象关系之间的管理

  • 反转:把开发人员new对象的权利 转移给容器实现

  • 正转:开发人员使用代码中 new对象

  • 容器:是一个服务器软件,一个框架(Spring)

3. IOC的技术实现:

DI实现IOC的功能

DI:依赖注入 只需提供对象的名称 对象创建、赋值等 由容器内部实现

 

三、 入门案例

1. 加入依赖

<!--//Spring依赖-->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>5.2.5.RELEASE</version>
</dependency>

2.创建类(接口和实现类)

service包下创建接口 imp包下实现类

3. 创建Spring配置文件

<!--在资源目录下 要创建Spring的xml-->
<?xml version="1.0" encoding="UTF-8"?>
<!--beans:根标签 spring把java对象成bean-->
<!--spring-beans.xsd:格式约束文件-->
<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">
<!--    声明bean 告诉spring创建对象
   id:自定义名 spring通过这个名找到对象
   class:全限定名称(不能是接口 必须类)-->
   <bean id="some" class="com.baidu.service.imp.SomeServiceImp"/>
</beans>

4. 测试使用对象

//ApplicationContext:是Spring的容器 通过容器获取对象
//ClassPathXmlApplicationContext:类路径加载Spring配置文件
ApplicationContext app =
new ClassPathXmlApplicationContext("beans.xml");

//getBean方法:获取
xxxx xx =
(xxxx)app.getBean("配置文件中的bean的id");

5. 注意点:

spirng: 创建对象的时间:创建spring的容器时,创建beans的所有对象

spring: 默认调用无参构造

获取容器中对象的信息api:

getBeanDefinitionCount(): 获取定义的对象数量

getBeanDefinitionNames():获取所有定义对象的名称

 

四、 DI实现语法

1. 通过spring完成 属性赋值

基本类型和String在这属于简单类型

引用

1.1 基于XML的DI实现

spring 配置文件中,使用标签和属性

set注入

spring 调用类的set方法 必须有

//在spring配置文件bean中为属性赋值
//实际调用set方法
<property name="属性名" value="值 都要加引号"/>

//引用类型
<property name="属性名" ref="time"/>
<bean id="time" class="java.util.Date"/>

 

构造注入

调用类的有参构造方法

<constructor-arg 
   name="构造方法的新参名"
   index="从0开始 构造方法参数位置"
   ref="引用"
   value="简单类型值"/>
//还有个省略index 但是要按方法参数位置

 

 

1.2 基于注解的DI实现

spring 配置文件中,使用spring的注解

1.3 引用类型自动注入

byName(按名注入):
//类的属性名和spring配置文件bean id名一致 类型一致
<bean id=""class="" autowire="byName">
   //简单类型赋值 引用自动
</bean>
byType(按类型注入):
//spring配置文件bean class类型一致或父子接口类关系
//唯一bean
<bean id=""class="" autowire="byType">
   //简单类型赋值 引用自动
</bean>

1.4 多个配置

1.优点

  • 文件小 效率高

  • 避免多人使用冲突

  1. 按功能模块

  1. 按类的功能

2.使用

//创建一个Srping主配置文件total.xml
//里面包含其他配置文件spring-*.xml
//一般不定义对象
<import resoutce = "classpath:路径.xml">
   
//可以使用通配符*
//不能包含total.xml
//需要在目录下才能使用
<import resoutce = "classpath:spring-*.xml">