目录
目录
文章目录
  1. 概述
  2. 笔记
  3. bean标签

Spring(学习笔记 一)

概述

Spring框架核心功能:

管理程序的代码(代码的切入):AOP(面向切面的编程)

内存空间的创建(控制对象的作用域):IoC(依赖注入,控制反转)



笔记

  1. Spring框架的IoC(Inversion of Control):控制反转IoC是Inversion of Control的缩写,是说对象的控制权进行转移,转移到第三方,比如转移交给了IoC容器,它就是一个创建工厂,你要什么对象,它就给你什么对象,有了IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

    1. 内存空间的创建:反射机制创建对象。

    2. 内存空间的赋值

      1. get/set方法注入:默认的赋值方式。
        1. id名称
        2. class类型
      2. 构造方法注入:对注入的bean需要创建相应的构造方法,基本数据类型采用的还是get/set方法。
        1. class类型
      3. 接口注入:接口引入进来。这种注入方式,还是以上两种方式,只不过是在实现数据注入的基础之上加入接口。
    3. Spring框架对象的匹配方式

      1. id名称(get/set方法注入)
        1. 类中的属性名和Bean中id值相匹配,<property name="类的属性" ref="关联的Bean的id值" />
        2. 自动匹配。
      2. class类型(get/set方法注入)
      3. 构造函数
      4. 接口注入
    4. Spring框架对象的生命周期(在同一个ApplicationContext范围内的生命周期)

      1. 所有项目都可以设置生命周期
        1. 单例模式:scope="sington",Spring只创建一个实例,一般逻辑业务都是使用单例模式
        2. 原型模式:scope="protype",Spring每一次获取就会创建一个新的实例,一般action都使用原型模式
      2. Web项目的生命周期,session,request等
    5. Spring可以将内存空间的创建和内存空间的赋值分离开来。

    6. Spring加载配置文件的方式

      1. Java项目

        1. FileSystemXmlApplicationContext()
        2. ClassPathXmlApplicationContext() (推荐)

          1
          2
          3
          4
          // 加载配置文件
          ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
          LoginBL p = (LoginBL)ac.getBean("loginBL");
      2. Web项目

    7. 实际工作中的Spring-IoC的实现方式

      • 接口注入 + get/set方法的注入 + 手工匹配

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        66
        67
        68
        69
        70
        // DAO接口
        public interface LoginDAO {
        public int login(String uname, String uwrod) throws Exception;
        }
        // DAO接口的实现类
        public class LoginDAOImpl implements LoginDAO {
        @override
        public int login(String uname, String uwrod) {
        ....
        }
        }
        // Service接口
        public interface LoginBL {
        public int login(String uname, String uword) throws Exception;
        }
        // Service接口的实现类
        public class LoginBLImpl implements LoginBL {
        // 接口注入
        private LoginDAO loginDao;
        @override
        public int login(String uname, String uword) throws Exception {
        return this.loginDao.login(uname,uword);
        }
        public LoginDAO getLoginDao() {
        return loginDao;
        }
        public void setLoginDao(LoginDAO loginDao) {
        this.loginDao = loginDao;
        }
        }
        // Test测试类
        public class test {
        private LoginBL loginBl;
        private String uname;
        private String uword;
        public static void main(Stirng[] args) {
        loginBl.login(uname,uword);
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        LoginBL p = (LoginBL)ac.getBean("loginBL");
        System.out.println(p);
        }
        }
      • Spring配置文件

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        ...
        <bean id="loginDAO" class="com.dao.impl.LoginDAOImpl" />
        <bean id="loginBL" class="com.service.impl.LoginBLImpl">
        <property name="loginDao" ref="loginDAO" />
        </bean>
        ...


bean标签

  • bean标签开辟空间,创建对象
  • 应该采用id或者name属性标识一个bean。

  • Person类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package com.bean.Person
    public class Person {
    private String name;
    private int age;
    public String getName() {
    ...
    }
    public void setName() {
    ...
    }
    public String getAge() {
    ...
    }
    public void setAge() {
    ...
    }
    }
  • Demo类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package com.bean.Demo
    public class Demo {
    private String title;
    private Demo demo;
    public Demo() {
    }
    public Demo(Demo demo) {
    this.demo = demo;
    }
    public String getTitle() {
    ...
    }
    public void setTitle() {
    ...
    }
    }
  • Spring配置文件之get/set注入、构造函数注入

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!-- set/get方式 id与属性的手工匹配, 常用 -->
    <bean id="xxx" class="com.bean.Demo">
    <property name="title" value="hello" />
    </bean>
    <bean id="person" class="com.bean.Person" scope="">
    <property name="name" value="King" />
    <property name="age" value="18" />
    <property name="title" ref="xxx" />
    </bean>
    <!-- 构造函数方式,bean的class属性和成员变量的自动匹配 不常用 -->
    <bean id="xxx" class="com.bean.Demo">
    <property name="title" value="hello" />
    </bean>
    <bean id="person" class="com.bean.Person" autowire="constructor">
    <property name="name" value="King" />
    <property name="age" value="18" />
    </bean>