Spring框架入门之Spring IOC(XML)& Bean工厂

版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84946023

1、Spring框架入门之Spring IOC(XML)& Bean工厂

1.1 什么是Spring框架?

         Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。一站式框架是指有EE开发的每一层解决方案:

  1. WEB层:SpringMVC
  2. Service层:Spring的Bean管理,Spring声明式事务
  3. DAO层:Spring的JDBC模板,Spring的ORM模块

目前Spring有两个版本:Spring3.X 和 Spring4.X,这里我们将展开Spring4.X的学习。


1.2 为什么学习Spring框架?


1.3 如何学习Spring框架?

     Spring框架下拥有9大模块,对于小白来讲还是从IOC来进行入门学习的。我们可以从Spring的官网:http://spring.io/来下载spring4.X的开发包,下载并解压后可以看到如下目录:

在spring-framework-4.2.4.RELEASE-dist目录下有全部的Spring文件:

  1. docsSpring的开发文档和API
  2. libsSpring的开发jar包
  3. schema:包含Spring的各种配置文件的约束

下面开始学习Spring 的IOC模块,加油骚年们!

 

1.3.1 什么是IOC?

  Spring IOC就是Spring框架中底层的Core Container中的内容;IOC(inversion of control)控制反转,是将对象的创建权反转交给Spring来管理。在实际的开发中,如果底层的实现切换了,需要修改源代码?大部分的Demo都是需要的,这是因为代码模块之间的耦合度太高,有的甚至牵一发而动全身,显然这样的情景放在实际企业级开发中是非常糟糕的,为了实现不修改代码(低耦合性),在Spring框架中就引入了工厂+反射+配置文件的方法,利用工厂代理来降低代码模块之间的耦合性,如下图所示:

 

1.3.2 使用Spring IOC

创建web项目并引入对应IOC支持的jar包:

 

创建接口和实现多个实现类(便于测试):

public interface UserDao{

         public void save();

}

 

public class UserDaoImpl1 implements UserDao{

         public void save()

         {

         System.out.println(“UserDaoImpl1执行了。。。”);

         }

}

public class UserDaoImpl2 implements UserDao{

         public void save()

         {

         System.out.println(“UserDaoImpl2执行了。。。”);

         }

}

 

创建applicationContext.xml文件:

参考spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html来编写applicationContext.xml文件

 

编写测试类:

ApplicationContext  applicationContext=new                                                                                                  ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao = (UserDao)applicationContext.getBean(UserDao.class);

userDao.save( );

 

         引入Spring IOC后我们就可以通过更改applicationContext.xml文件中Bean的配置来切换userDao.save();实际调用的是实现类中的具体save方法。

 

1.3.3 IOC和DI

  1. IOC:控制反转,将对象的创建权反转给了Spring。
    1. DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
  2. 面向对象的时候

         依赖

        Class A{

            }

 

        Class B{

            public void xxx(A a){

               }

       }

继承:is a(接口:like a)

Class A{

}

Class B extends A{

}

聚合:has a


1.3.4 Spring工厂类

Spring工厂类的结构图:

由图:      

  1. BenaFactory(老版本的工厂):在调用getBean()时才生成类的实例。
  2. ApplicationContext(新版本的工厂):在加载配置文件时就将Sping管理的类实例化,ApplicationContext中有两个实现类:
    1. ClassPathXmlApplicationContext:加载类路径下的配置文件
    2. FileSystemXmlApplicationContext:加载系统路径下的配置文件

 

1.3.5 Bean配置

<bean>标签的id和name的配置

  1. id                 :使用了约束中的唯一约束。里面不能出现特殊字符的。
  2. name         :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。
    1. Spring和Struts1框架整合的时候
    2. <bean name=”/user” class=””/>

 

   Bean的生命周期的配置(了解)

  1. init-method                 :Bean被初始化的时候执行的方法
  2. destroy-method        :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

 

    Bean的作用范围的配置(重点)

  1. scope                            :Bean的作用范围
    1. singleton          :默认的,Spring会采用单例模式创建这个对象。
    2. prototype        :多例模式。(Struts2Spring整合一定会用到)
    3. request             :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
    4. session              :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
    5. globalsession   :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

 

1.4 Spring的Bean管理(XML方式)

1.4.1 Spring的Bean的实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

无参构造方法的方式(默认)

    编写类

    编写配置

静态工厂实例化的方式

       编写Bean2的静态工厂

         配置

实例工厂实例化的方式

          Bean3的实例工厂

         配置

 

1.4.2 Spring的属性注入(重点)

1.构造方法的方式的属性注入

      1.构造方法的属性注入

 2.Set方法的方式的属性注入

         Set方法的属性注入

           Set方法设置对象类型的属性

     

3.P名称空间的属性注入(Spring2.5以后)

             通过引入p名称空间完成属性的注入:

  1.   写法:
    1. 普通属性         p:属性名=”值”
    2. 对象属性         p:属性名-ref=”值”
  2.   P名称空间的引入

  1. 使用p名称空间

 

 4.SpEL的属性注入(Spring3.0以后)

  1. SpEL:Spring Expression Language,Spring的表达式语言。
    1. 语法:
      1. #{SpEL}

5.集合类型属性注入(了解)

配置

    <!-- Spring的集合属性的注入============================ -->

    <!-- 注入数组类型 -->

    <bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">

        <!-- 数组类型 -->

        <property name="arrs">

            <list>

                <value>王东</value>

                <value>赵洪</value>

                <value>李冠希</value>

            </list>

        </property>

       

        <!-- 注入list集合 -->

        <property name="list">

            <list>

                <value>李兵</value>

                <value>赵如何</value>

                <value>邓凤</value>

            </list>

        </property>

       

        <!-- 注入set集合 -->

        <property name="set">

            <set>

                <value>aaa</value>

                <value>bbb</value>

                <value>ccc</value>

            </set>

        </property>

       

        <!-- 注入Map集合 -->

        <property name="map">

            <map>

                <entry key="aaa" value="111"/>

                <entry key="bbb" value="222"/>

                <entry key="ccc" value="333"/>

            </map>

        </property>

    </bean>

 

1.5 Spring分模块开发

在加载配置文件的时候加载多个:

ApplicationContxt  applicationContext=new                                                                                                              ClassPathXmlApplicationContext(“applicationContext.xml”,”applicationContext2.xml”);

 

在一个配置文件中引入多个配置文件:


                                                                                                 谢谢阅读!     -----知飞翀 

猜你喜欢

转载自blog.csdn.net/biggerchong/article/details/84946023
今日推荐