01---Spring框架

时间:2022-12-13 21:08:09
  1. Spring框架简介及官方压缩包目录介绍
  2. 工厂模式
  3. Spring环境搭建
  4. IoC详解
  5. Spring创建Bean的三种方式(包含两种工厂方式)
  6. scope属性讲解
  7. DI详解
  8. Spring中几种注入方式
  9. Spring解析properties文件
  1. Spring框架简介及官方压缩包目录介绍

  1. 主要发明者:Rod Johnson

  2. *理论推崇者:

    2.1 *理论:不用重复发明*.

    2.2 IT行业:直接使用写好的代码.

  3. Spring框架宗旨:不重新发明技术,让原有技术使用起来更加方便.

  4. Spring几大核心功能

    4.1 IoC/DI    控制反转/依赖注入

    4.2 AOP      面向切面编程

    4.3 声明式事务.

    4.4 采用模板方式对其他技术的支持

    4.5 spring的定时器

    5.注意spring中的不同的版本中。包的结构以及名称、数量都会有变化。

二.工厂模式

工厂模式时候实例化对象的一种设计模式。可以降低对象之间的耦合度。通过工厂对象来解耦。更符合程序设计开闭原则。

        1. 简单工厂

        2. 抽象工厂

        3. 通用工厂

三.Spring环境搭建

1.导入jar包

基本jar包

01---Spring框架01---Spring框架

01---Spring框架

2.创建spring的配置文件

2.1spring的配置文件可以叫任意的名称。默认的习惯于applicationContext.xml

2.2spring的配置文件可以在项目的任意位置。一般默认的我们会放到src的根下。

2.2.1如果没有添加约束文件。需要自己手动或者联网状态下载spring的约束文件

3.在spring的配置文件中通过<bean>标签来告知spring管理哪个对象的生命周期

3.1<bean> id:表示唯一的一个标记。不能重复

3.2<bean> class:把哪个类实例化。

4.启动spring框架

4.1启动时指定创建哪个IOC容器

4.1.1BeanFactry:基本的IOC容器。只是缓存对象。

4.1.2ApplicationContext:高级IOC容器。是beanFactory的子接口 扩展了BeanFactory的能力。添加了如 解析properties 国际化等处理

三.IoC详解

1.IOC(Inversion of contorl)控制反转

2.控制:实例化对象的过程

3.反转:原来实例化一个对象的过程他的控制权是掌握在我们程序员自己手中的。而现在整个对象创建过程完全交由spring来负责。

4.容器(container)并不是值的是web容器。他不能处理请求。该容器是指,spring缓存对象的集合(Map<String,Object>)。

 

四.Spring创建Bean的三种方式(包含两种工厂方式)

 

1.BeanFactory与ApplicationContext对象的区别

1.1创建对象的时间

BeanFactory是在调用getBean方法时,先去创建对象。

ApplicationContext是在启动spring框架时就讲所有的对象创建好。

1.2 能力上的区别

BeanFactory只是你一个基本的IOC容器。只能缓存对象没有额外的能力。而ApplicaitonContenxt可以操作properties,国际化等。。。

1.使用无参的构造方法

Spring的配置文件

<bean id="suibian" class="com.bjsxt.dao.SpringTest"></bean>

2.使用工厂模式来创建对象

<!-- 使用工厂模式来构建对象 -->

<!-- 1.配置能够产生对象的工厂 -->

<bean id="factory" class="com.bjsxt.commons.ObjectFactory"></bean>

<!-- 告知spring哪个工厂中调用的哪个方法 -->

<bean id="test" factory-bean="factory" factory-method="createSpringTest"></bean>

4.使用工厂中的静态方法来获取对象

<!-- 调用工厂中的静态方法获取对象 -->

<bean id="test" class="com.bjsxt.commons.ObjectFactory"  factory-method="createSpringTest"></bean>

五.scope属性讲解

Scope属性是spring配置文件中的<bean>标签的属性。他决定了采用什么方式来创建对象(单例,多例) scope的取值范围为:

Prototype:多例

Singleton:单例(默认值)

六.DI详解与Spring中几种注入方式

1.DI:dependence injection

2.使用构造方法完成值的注入

<constructor-arg index="" name="" type="" value=""></constructor-arg>

2.1.index: 表示构造方法中的参数的位置。注意从0开始

2.2.name:按照构造方法的参数的名称完成注入。

2.3.type:根据类型匹配位置

2.4.value:注入的值(value一般用于存放基本数据类型+String)

3.基于属性的注入方式

3.1 要求类中必须要含有一个无参的构造方法。

3.2 要求属性必须提供set方法。

<bean id="suibian" class="com.bjsxt.dao.SpringTest" scope="prototype">

<property name="msg" value="lisi"></property>

</bean>

4.注入其他类型

4.1 注入set类型

<bean id="suibian" class="com.bjsxt.dao.SpringTest" scope="prototype">

<!-- <property name="msg" value="lisi"></property> -->

<property name="set">

<set>

<value>a</value>

<value>b</value>

<value>c</value>

</set>

</property>

</bean>

4.2 注入List类型

<bean id="suibian" class="com.bjsxt.dao.SpringTest" scope="prototype">

<property name="list">

<list>

<value>aa</value>

<value>bb</value>

<value>cc</value>

</list>

</property>

</bean>

4.3 注入一个Map

<bean id="suibian" class="com.bjsxt.dao.SpringTest" scope="prototype">

<property name="map">

<map>

<entry key="key1">

<value>aaa</value>

</entry>

<entry key="key2">

<value>bbb</value>

</entry>

</map>

</property>

</bean>

4.4 注入一个properties

<bean id="suibian" class="com.bjsxt.dao.SpringTest" scope="prototype">

<property name="prop">

<props>

<prop key="key1">

aaaa

</prop>

<prop key="key2">

bbbb

</prop>

</props>

</property>

</bean>

4.5 注入springIOC容器中的对象

要求注入的对象与被注入的对象都需要在ioc容器中存在。

<bean id="userDao" class="com.bjsxt.dao.UserDaoImpl"></bean>

<bean id="userServie" class="com.bjsxt.service.UserServiceImpl">

<property name="userDao">

<ref bean="userDao"/>

</property>

</bean>

七.Spring解析properties文件

1.通过在spring的配置文件中开启操作properties文件的工具类。

<!-- 配置解析properties工具类 -->

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location">

<value>/config.properties</value>

</property>

</bean>

2.以后我们会使用命名空间来开启这个工具类

以后再讲。。。。。