Spring(一)

作者: 一直想上树的猪 | 来源:发表于2018-12-09 23:32 被阅读12次

一、Spring框架简介

1.主要发明者:Rod Johnson
2.轮子理论推崇者:

轮子理论:不用重复发明轮子
IT行业:直接使用写好的代码

3.Spring框架的宗旨:不重新发明技术,让原有技术使用起来更加方便
4.几大核心功能:

IOD/DI : 控制反转/依赖注入
AOP:面向切面编程
声明式事务
采用模板的方式对其他技术的支持
Spring的定时器

二、工厂模式

Spring采用工厂模式进行实现,有关该设计模式的知识点我这里不做详细赘述,读者可以自行百度。这里主要说一下:工厂模式是实例化对象的一种设计模式,可以降低对象之间的耦合度,通过工厂对象来解耦,更符合程序设计的开闭原则
工厂模式有几种:

简单工厂
抽象工厂(工厂方法模式)
通用工厂

三、Spring环境搭建

1.导入jar包
图片1.png
2.创建Spring的配置文件

2.1 Spring的配置文件可以叫任意的名字,默认习惯于叫applicationContext.xml
2.2 Spring的配置文件可以在项目的任意位置,一般默认地会放在src的根目录下。

如果没有添加约束文件,需要自己手动或者联网状态下载Spring配置文件

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

其中有两个属性:
id表示唯一的一个标记,命名不可以重复;
ckass表示把具体的哪个类实例化

4.启动Spring框架

需要注意以下几个问题:

1.启动时指定创建哪个IOC容器
2.BeanFactry:基本的IOC容器。只是缓存对象。
3.ApplicationContext:高级IOC容器。是beanFactory的子接口 扩展了BeanFactory的能力。添加了如 解析properties 国际化等处理

四、IOC详解

1.IOC(Inversion of control)控制反转
2.控制:实例化对象的过程
3.反转:原来实例化一个对象的过程它的控制权是掌握在程序员手中的,而现在整个对象创建过程完全交给Spring来负责。
4.容器并不是指的web容器(Tomcat),它不能处理请求,该容器是指Spring缓存对象的集合(Map<String,Object>)

五、Spring创建bean的三种方式(包含两种工厂方式)

1.首先我们来说一下BeanFactory与ApplicationContext对象的区别

1.1创建对象的时间
BeanFactory是在调用getBean方法时先去创建对象
ApplicationContext是在启动spring框架时就将所有的对象创建好。
1.2能力上的区别
BeanFactory只是一个基本的IOC容器,只能缓存对象,没有的额外的能力。
ApplicaitonContenxt可以操作properties,国际化等。

2.使用无参的构造方法
Spring的配置文件

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

3.使工厂模式来创建对象

<!-- 使用工厂模式来构建对象 -->
    <!-- 1.配置能够产生对象的工厂 -->
    <bean id="factory" class="com.tinner.commons.ObjectFactory"></bean>
    <!-- 告知spring哪个工厂中调用的哪个方法 -->
    <bean id="test" factory-bean="factory" factory-method="createSpringTest"></bean>

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

<!-- 调用工厂中的静态方法获取对象 -->
    <bean id="test" class="com.tinner.commons.ObjectFactory"  factory-method="createSpringTest"></bean>

六、scope属性详解

scope属性是spring配置文件中<bean>标签的属性,它决定了采用什么方式来创建对象(单例、多例)

scope的取值范围:
Prototype:多例
Singleton:单例(默认)

七、DI详解与Spring的几种注入方式

1.DI:dependency injection 依赖注入
2.使用构造方法来完成值的注入
<constructor-arg index="" name="" type="" value=""></constructor-arg>

其中:
index:表示构造方法中的参数的位置,从0开始
name:按照构造方法的参数的名称完成注入
type:根据类型匹配位置
value:注入的值(value一般用于存放基本数据类型+String)

3.基于属性的注入方式

注意:
要求类中必须要含有一个无参的构造方法
要求属性必须提供set方法
例如:

<bean id="suibian" class="com.tinner.dao.SpringTest" scope="prototype">
        <property name="msg" value="lisi"></property>
    </bean>    
4.注入其他类型
4.1注入set类型
<bean id="suibian" class="com.tinner.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.tinner.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.tinner.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注入proprties
 <bean id="suibian" class="com.tinner.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.tinner.dao.UserDaoImpl"></bean>
<bean id="userServie" class="com.tinner.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.使用命名空间开启这个工具类

相关文章

网友评论

    本文标题:Spring(一)

    本文链接:https://www.haomeiwen.com/subject/dqrlhqtx.html