Spring学习(一)

一、Spring 框架简介

1. Spring 几大核心功能

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

      1.2 AOP    面向切面编程

      1.3声明式事务

2. Ioc

      2.1 名称:控制反转(Inversion of Control)

      2.2 IoC是什么?

            2.2.1 IoC完成的的事情:原先由程序员主动通过 new 实例化对象事情,转交给 Spring 负责

            2.2.2 控制反转中控制指的是:控制类的对象.

            2.2.3 控制反转中“反转”指的是转交给 Spring 负责.

            2.2.4 IoC 最大的作用:解耦(程序员不需要管理对象.解除了对象管理和程序员之间的耦合.)

二、Spring环境搭建

Spring框架下载地址:https://repo.spring.io/release/org/springframework/spring/

commons-logging包下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi

      1. 导入jar包:四个核心包一个日志包(commons-logging)

 

      2. 在src目录下新建 applicationContext.xml

            2.1 文件名称和路径自定义

            2.2 记住 Spring 容器 ApplicationContext,applicationContext.xml 配置的信息最终存储到了 AppliationContext 容器中

            2.3 Spring 配置文件是基于 schema

                  2.3.1 schema文件扩展名为xsd

                  2.3.2 把 schema 理解成 DTD 的升级版.

                        2.3.2.1 比 DTD 具备更好的扩展性.

                        2.3.3 每次引入一个 xsd 文件是一个 namespace(xmlns)

            2.4 配置文件中只需要引入基本 schema

                 2.4.1 通过<bean/> 创建对象.

                 2.4.2 默认配置文件被加载时创建对象

<?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">

<!--id表示获取到对象的标识,class表示创建哪个类的对象-->

    <bean id="peo" class="com.sen.pojo.People">

    </bean>

</beans>

        3.测试方法

           3.1 getBean(“<bean>标签 id 值”,返回值类型); //如果没有第二个参数, 默认是 Object

           3.2 getBeanDefinitionNames(); //Spring容器中目前所有管理的所有对象

        //加载springxml文件

        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        //spring创建普通对象,People.class可以不写,不过返回的就是Object,需要强转

        People people = ac.getBean("peo",People.class);

        System.out.println(people);

三、Spring创建对象的三种方式

      1. 通过构造方法创建

            1.1 无参构造创建:默认情况.

            1.2 有参构造创建:需要明确配置

                  1.2.1 需要在类中提供有参构造方法

            1.3 在 applicationContext.xml 中设置调用哪个构造方法创建对象

    <bean id="peo" class="com.sen.pojo.People">

        <!--

        ref:引用另一个bean value表示基本数据类型或者是String

        index:从0开始,表示形参的位置

        name:形参名

        type:形参类型(区分开关键字和封装类,比如intInteger

        valueref:传入的实参

        indexnametype三者可以同时出现,这三个参数可以精准控制要使用什么构造方法

        注意:

            当有多个同形参(形参位置不同)的构造方法时

            调用构造方法的顺序和xml中的标签顺序无关,和类的构造方法顺序有关,遇到第一个符合的构造方法就执行第一个

        -->

        <constructor-arg name="id" type="int" value="123"></constructor-arg>

        <constructor-arg name="name" type="java.lang.String" value="张三"></constructor-arg>

    </bean>

</beans>

2. 实例工厂

      2.1 工厂设计模式:帮助创建类对象.一个工厂可以生产多个对象.

      2.2 实例工厂:需要先创建工厂,才能生产对象

      2.3 步骤:

            2.3.1 必须要有一个实例工厂

public class PeopleFactory {

    public People creatPeople(){

        return new People(3,"实例工厂");

    }

}

            2.3.2 在 applicationContext.xml 中配置工厂对象和需要创建的对象

<!--

        实例工厂的创建配置

        前提:必须要有一个实例工厂

                其次在xml中配置工厂对象和需要创建的对象

        class:实例工厂的类的全路径

        factory-bean:实例工厂的类

        factory-method:实例工厂创建类的方法

        -->

    <bean id="factory1" class="com.sen.pojo.PeopleFactory"></bean>

    <bean id="peo1" factory-bean="factory1" factory-method="creatPeople"></bean>

 

3. 静态工厂

      3.1 不需要创建工厂,快速创建对象.

      3.2 步骤

            3.2.1 编写一个静态工厂(在方法上添加 static)

public class PeopleFactory {

    public static People creatPeopleStatic(){

        return new People(4,"静态方法创建的对象");

    }

}

           3.2.2 在 applicationContext.xml 中

<!--

        静态工厂的创建配置

        只需要写上静态工厂的类,以及创建对象的静态方法

        class:静态工厂的类的全路径

        factory-method:创建对象的静态方法

        -->

    <bean id="factory2" class="com.sen.pojo.PeopleFactory" factory-method="creatPeopleStatic"></bean>

 

四、给Bean的属性赋值(注入)

      1.通过构造方法设置值(详见三)

      2.设置注入:通过对应的set/get方法给对象赋值

           2.1 如果属性是基本数据类型或者是String等类型,直接使用<property>标签            

           2.2 可以通过value属性或者value子标签进行赋值

<bean id="peo" class="com.sen.pojo.People">

 

  <!-- 可以通过value属性或者value子标签进行赋值 -->

    <property name="id" >

      <value>1</value>

    </property>

    <property name="name" value="对对象设置注入"></property>

   

    <!-- Set属性进行基本赋值

    如果Set中的元素是对象的话,使用ref-->

    <property name="sets">

      <set>

        <value>Set中每一个元素</value>

        <value>就是使用一个value</value>

        <value>来进行赋值</value>

      </set>

    </property>

   

    <!-- List属性进行赋值、

    如果list中只有一个值,可以使用value属性进行赋值

     -->

    <property name="lists">

      <list>

        <value>List中的每一个元素</value>

        <value>和给Set赋值差不多</value>

      </list>

    </property>

 

    <!-- 给数组进行赋值

    如果数组只有一个值,可以使用value属性进行赋值

     -->

    <property name="strs">

      <array>

        <value>数组中的一个元素</value>

        <value>也是使用一个value子标签</value>

        <value>来进行赋值</value>

      </array>

    </property>

   

    <!-- map属性进行赋值 -->

    <property name="maps">

      <map>

        <entry key="a" value="Map进行赋值"></entry>

        <entry key="b" value="一个entry就是一个元素"></entry>

        <entry key="c">

          <value>可以使用属性也可以使用子标签</value>

        </entry>

      </map>

    </property>

五、DI

      1. DI:中文名称:依赖注入(Dependency Injection)

      2. DI 是什么?

           2.1 DI 和 IoC 是一样的

            2.2 当一个类(A)中需要依赖另一个类(B)的对象时,把 B 赋值给 A 的过程就叫做依赖注入.

  <bean id="peo" class="com.sen.pojo.People">

  <!-- DI:依赖注入

    对对象属性进行赋值

    ref:另一个beanid

    name:该属性的名称

     -->

    <property name="dp" ref="DIpeo"></property>

  </bean>

  <!-- DI -->

  <bean id="DIpeo" class="com.sen.pojo.DIpeople">

      <property name="id" value="1"></property>

      <property name="price" value="11"></property>

  </bean>

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值