资讯详情

Spring5复习笔记

0. Spring架构

Spring5模块

1. 内容介绍

  1. Spring 框架概述
  2. IOC容器
    1. IOC底层原理
    2. IOC接口(BeanFactory)
    3. IOC操作Bean管理(基于xml)
    4. IOC操作Bean管理(基于注释)
  3. AOP
  4. JdbcTemplete
  5. 事务管理(声明事务)
  6. Spring5新特性

2. Spring 框架概述

  1. Spring是轻量级开源的JavaEE框架
  2. Spring可以解决企业发展的复杂性
  3. Spring有两个核心部分:IOC和AOP
    • IOC :控制反转,
    • Aop :面向切面,
  4. Spring 特点
    1. 便于解耦,简化开发
      • IOC控制反转解耦对象之间的耦合
    2. Aop编程支持
    3. 方便程序测试
      • 集成的Junit,方便对程序进行单元测试
    4. 与其他框架集成方便
    5. 事务操作方便
      • 简化了声明事务的操作
    6. 降低API开发难度

3. Spring 入门案例

3.1 下载Spring5

  1. 使用Spring 最新稳定版5.2.6

  1. 下载地址

3.2 打开idea工具,创建java工程

3.3 导入Spring5相关基本jar包

3.4 在这一类创造普通的方法

public class User { 
             public void add() { 
                 System.out.println("add...");     } } 

3.5 创建Spring配置文件,配置文件创建对象

  1. Spring 使用配置文件xml格式

bean1

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">   <!--1 配置User对象创建-->  <bean id="user" class="com.atguigu.spring5.User"></bean>
</beans>

3.6 进行测试代码编写

package com.atguigu.spring5.testdemo;

import com.atguigu.spring5.Book;
import com.atguigu.spring5.Orders;
import com.atguigu.spring5.User;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring5 { 
        

    @Test
    public void testAdd() { 
        
        //1 加载spring配置文件
        BeanFactory context =
                new ClassPathXmlApplicationContext("bean1.xml");

        //2 获取配置创建的对象
        User user = context.getBean("user", User.class);

        System.out.println(user);
        user.add();
    }
}

测试结果

4. IOC容器

4.1 IOC(概念和原理)

4.1.1 什么是IOC?

  1. 控制反转,把对象创建和对象之间的调用过程交给Spring进行管理
  2. 使用IOC的目的:为了降低耦合度
  3. 做入门案例就是IOC实现

4.1.2 IOC底层原理

  • xml解析
    • 使用xml解析解析xml配置文件中的配置信息
  • 工厂模式
    • 使用工厂来创建对象
  • 反射
    • 工厂中实际创建对象的方式,利用反射的Class.forName()方法创建对象

4.1.3 画图讲解IOC底层原理

4.2 IOC(BeanFactory接口)

  1. IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
  2. Spring提供IOC容器实现两种方式:(两个接口)
    1. BeanFactory:IOC容器基本实现,是,不提供开发人员进行使用
      • 加载配置文件时候不会创建对象,在获取对象(使用)时才会去创建对象
    2. ApplicationContext: BeanFactory接口的子接口,提供更多更强大的功能,一般由
      • 加载配置文件时就会把在配置文件对象进行创建-让对象在程序启动时创建,这样只会使程序启动时间较长,如果在获取对象(使用)时才会去创建对象,此时会使用户的等待时间变长不利于交互
  3. ApplicationContext接口有有实现类

4.3 IOC操作Bean管理

4.3.1 概念

4.3.1.1 什么是Bean管理?

  1. Bean管理值的是两个操作
  2. Spring创建对象
  3. Spring属性注入

4.3.1.2 Bean管理操作有两种方式

  1. 基于xml配置文件方式实现
  2. 基于注解方式实现

4.3.2 IOC操作Bean管理(基于xml方式)

4.3.2.1 基于xml方式创建对象

    <!--1 配置User对象创建-->
    <bean id="user" class="com.atguigu.spring5.User"></bean>
  1. 在Spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建

  2. 在bean标签有很多,介绍常用的属性

    • id属性: 唯一标识,一般使用类名首字母小写命名
    • class属性: 类的全路径,该属性值用于反射时创建对象
  3. 创建对象时,

4.3.2.2 基于xml方式注入属性DI

  1. DI:依赖注入,也就是属性注入

4.3.2.3 注入方式一-使用set方法进行注入

  1. 创建类,定义属性和属性对应的set方法

    package com.atguigu.spring5;
    
    /** * 演示使用set方法进行注入属性 */
    public class Book { 
              
        //创建属性
        private String bname;
        private String bauthor;
        //创建属性对应的set方法
        public void setBname(String bname) { 
              
            this.bname = bname;
        }
        public void setBauthor(String bauthor) { 
              
            this.bauthor = bauthor;
        }
        /打印属性-用于测试属性是否注入成功
        public void testDemo() { 
              
            System.out.println(bname+"::"+bauthor);
        }
    }
    
  2. 在spring配置文件配置对象创建,配置属性注入

    	<!--2 set方法注入属性-->
        <bean id="book" class="com.atguigu.spring5.Book">
            <!--使用property完成属性注入 name:类里面属性名称 value:向属性注入的值 -->        
            <property name="bname" value="易筋经"></property>
            <property name="bauthor" value="达摩老祖"></property>
        </bean>
    
  3. 测试代码及结果

    @Test
        public void testBook1() { 
              
            //1 加载spring配置文件
            ApplicationContext context =
                    new ClassPathXmlApplicationContext("bean1.xml");
    
            //2 获取配置创建的对象
            Book book = context.getBean("book", Book.class);
    
            System.out.println(book);
            book.testDemo();
        }
    

4.3.2.4 注入方式二-使用有参构造进行注入

  1. 创建类,定义属性,创建属性对应的有参构造方法

    package com.atguigu.spring5;
    
    /** * 使用有参数构造注入 */
    public class Orders { 
              
        //属性
        private String oname="";
        private String address;
        //有参数构造
        public Orders(String oname,String address) { 
              
            this.oname = oname;
            this.address = address;
        }
    	//打印属性-用于测试属性是否注入成功
        public void ordersTest() { 
              
            System.out.println(oname+"::"+address);
        }
    }
    
    
  2. 在spring配置文件中进行配置

        <!--3 有参数构造注入属性-->
        <bean id="orders" class="com.atguigu.spring5.Orders">
            <constructor-arg name="oname" value="电脑"></constructor-arg>
            <constructor-arg name="address" value="China"></constructor-arg>
        </bean>
    
  3. 测试代码及结果

        @Test
        public void testOrders() { 
              
            //1 加载spring配置文件
            ApplicationContext context =
                    new ClassPathXmlApplicationContext("bean1.xml");
    
            //2 获取配置创建的对象
            Orders orders = context.getBean("orders", Orders.class);
    
            System.out.println(orders);
            orders.ordersTest();
        }
    

4.3.2.5 p名称空间注入(了解)

名称空间注入本质上还是set方法注入,只是在xml配置中简化了写法

  1. 使用p名称空间注入,可以简化基于xml配置方式

    1. 第一步: 添加p名称空间在配置文件中

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      
    2. 第二步: 进行属性注入,在bean标签里进行操作

          <!--p名称空间注入-->
          <bean id="book" class="com.atguigu.spring5.Book" p:bname="九阳神功" p:bauthor="无名氏">
          </bean>
      
    3. 测试代码及结果

          @Test
          public void testBook1() { 
                  
              //1 加载spring配置文件
              ApplicationContext context =
                      new ClassPathXmlApplicationContext("bean1.xml");
      
              //2 获取配置创建的对象
              Book book = context.getBean("book", Book.class);
      
              System.out.println(book);
              book.testDemo();
          }
      

4.3.2.6 xml注入其他类型属性

4.3.2.6.1 字面量
4.3.2.6.1.1 null值
        <!--null值-->
        <property name="address">
            <null/>
        </property>
4.3.2.6.1.2 属性值包含特殊符号
        <!--属性值包含特殊符号 1 把<>进行转义 &lt; &gt; 2 把带特殊符号内容写到CDATA -->
        <property name="address">
            <value><![CDATA[<<南京>>]]></value>
        </property>
4.3.2.6.2 注入属性-外部bean
  1. 创建两个类service类和dao类
  2. 在service调用dao里面的方法
  3. 在spring配置文件中进行配置

UserDao

package com.atguigu.spring5.dao;

public interface UserDao { 
        
    public void update();
}

UserDaoImpl

package com.atguigu.spring5.dao;

public class UserDaoImpl implements UserDao { 
        

    @Override
    public void update() { 
        
        System.out.println("dao update...........");
    }
}

UserService

package com.atguigu.spring5.service;

import com.atguigu.spring5.dao.UserDao;
import com.atguigu.spring5.dao.UserDaoImpl;

public class UserService { 
        

    //创建UserDao类型属性,生成set方法
    private UserDao userDao;
    public void setUserDao(UserDao userDao) { 
        
        this.userDao = userDao;
    }

    public void add() { 
        
        System.out.println("service add...............");
        userDao.update();
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--1 service和dao对象创建-->
    <bean id="userService" class="com.atguigu.spring5.service.UserService">
        <!--注入userDao对象 name属性:类里面属性名称 ref属性:创建userDao对象bean标签id值 -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>
    <bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>
</beans>

测试类及结果

    @Test
    public void testBean1() { 
        
        //1 加载spring配置文件
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean2.xml");

        //2 获取配置创建的对象
        UserService userService = context.getBean("userService", UserService.class);

        userService.add();
    }

4.3.2.6.3 注入属性-内部bean
  1. 一对多关系:部门和员工
    • 一个部门有多个员工,一个员工属于一个部门部门是一,员工是多
  2. 在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

Dept

package com.atguigu.spring5.bean;

//部门类
public class Dept { 
        
    private String dname;
    public void setDname(String dname) { 
        
        this.dname = dname;
    }

    @Override
    public String toString() { 
        
        return "Dept{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

Emp

package com.atguigu.spring5.bean;

import java.util.Arrays;

//员工类
public class Emp { 
        
    private String ename;
    private String gender;
    //员工属于某一个部门,使用对象形式表示
    private Dept dept;

    //生成dept的get方法
    public Dept getDept() { 
        
        return dept;
    }

    public void setDept(Dept dept) { 
        
        this.dept = dept;
    }
    public void setEname(String ename) { 
        
        this.ename = ename;
    }
    public void setGender(String gender) { 
        
        this.gender = gender;
    }

    public void add() { 
        
        System.out.println(ename+"::"+gender+"::"+dept);
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--内部bean-->
    <bean id="emp" class="com.atguigu.spring5.bean.Emp">
        <!--设置两个普通属性-->
        <property name="ename" value="lucy"></property>
        <property name="gender" value="女"></property>
        <!--设置对象类型属性-->
        <property name="dept">
            <bean id="dept" class="com.atguigu.spring5.bean.Dept">
                <property name="dname" value="安保部"></property>
            </bean>
        </property>
    </bean>
</beans>

测试类及结果

    @Test
    public  

标签: jack电子连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台