Spring框架新手入门学习笔记(内附源码)

Spring

1.本章主要内容

1.1.Spring框架概要

1.2.IOC容器 (***)

1.3.AOP (***)

1.4.jdbcTemplate

1.5.事务管理 (***)

1.6.Spring5新特性

1.7.Spring整合Mybatis (*)

2.Spring概要

概述:它是轻量级的开源的JavaEE框架

  • 轻量级:它的体积小,依赖的jar包比较少,并且不需要额外依赖其他的组件

  • 开源:免费提供源代码

  • 框架:可以简化我们构建软件的过程

目的:为了解决企业级应用的复杂性

核心:

  • IOC:控制反转-把创建对象的过程交给Spring进行管理

  • AOP:面向切面编程-不修改源码进行功能增强

优点:

  • 方便解耦,简化开发
  • 对AOP编程的支持
  • 方便程序的测试
  • 方便整合其他各种的框架
  • 方便进行事务操作
  • 降低API开发

3.入门案例

3.1.入门案例1

  • 先再pojo里创建User实体类

    package com.wdzl.pojo;
    
    public class User {
         
    
    
        public void showInfo(){
         
            System.out.println("我是User的对象");
        }
    }
    
    
    • 再在resource中创建xml文件

      <?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">
      <!--    创建user对象 -->
          <bean id="user" class="com.wdzl.pojo.User"></bean>
      </beans>
      
      • 最后在test里进行测试

        import org.junit.Test;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        
        
        public class UserTest {
                 
            @Test
            public void test(){
                 
                //1.加载Spring配置文件
                ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
                //2.通过获取User对象
                User user = context.getBean("user",User.class);
                user.showInfo();
        
            }
        }
        

3.2.入门案例2

1.创建图书类

public class Book {
   
   private String name;
   private String author;
   }

2.创建xml文件

<?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">
<!--    创建book对象 -->
<!--    <bean id="book" class="com.wdzl.pojo.Book">-->
<!--        <property name="name" value="Java从入门到入土"></property>-->
<!--        <property name="author" value="布莱恩特"></property>-->
<!--    </bean>-->
    <bean id="book" class="com.wdzl.pojo.Book">
<!--         <constructor-arg name="name" value="Java葵花宝典"></constructor-arg>-->
<!--         <constructor-arg name="author" value="昭通"></constructor-arg>-->
         <constructor-arg index="0" value="Java葵花宝典"></constructor-arg>
         <constructor-arg index="1" value="昭通"></constructor-arg>
    </bean>
</beans>

3.test

import com.wdzl.pojo.Book;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BookTest {
   
    @Test
    public void test(){
   
        //1.加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
        //2.获取对象
        Book book = context.getBean("book", Book.class);
        System.out.println(book);
    }
}

4.IOC容器

概述

  • 控制反转
  • 综上所述:控制反转就是把创建对象,和对象间的调用的过程交给Spring来管理。目的是为了降低类与类之间的耦合性

4.1底层原理

  • XML解析
  • 工厂模式
  • 反射

4.2原理图解

原理图解

4.3几个重要的概念

1.IOC容器:IOC的实现,依赖于IOC容器,而IOC容器的本质就是对象工厂

2.IOC容器的实现

​ BeanFactory:是最底层的接口,他只提供了最简单的容器功能:加载配置文件 和 创建对象

  • ​ 当加载配置文件时,不会创建被配置的对象,只有在使用时,对象才会创建
    • 好处:节省内存
    • 坏处:因为在服务器运行的时候去创建对象,会影响执行效率
  • ApplicationContext:应用上下文,他是继承了BeanFactory,它是Spring更高级的一个容器接口,它提供了更多有用的功能
    • 当加载配置文件的时候,会同时创建被配置的 对象
      • 好处:效率高,将复杂的创建过程在服务器启动时完成
      • 坏处:耗费资源

3.ApplicationContext的三个实现类

查看:选中ApplicationContext —》按Ctrl 点击 —》右上角download source(如果有)-----》Ctrl H—》即可查看继承体系结构

  •   ClassPathXmlApplicationContext:从项目中的Sources文件中加载配置文件你
    
  • ​ FileSystemXmlApplicationContext:从文件系统读取配置文件(需要访问权限)
  • ​ AnnotationConfigApplicationContext:读取注解配置

5.IOC操作-Bean管理

概念:IOC 操作-Bean管理是指两个操作:1.Spring创建对象 2.Spring注入属性(属性赋值)

实现方式

1.XML方式

2.注解方式

5.1.基于XML方式—创建对象

该方式与入门案例方式相同

bean标签的常用属性

  • id:唯一标识,通过该属性可以找到对应的Bean标签
  • class:类的全限定类名

注意事项

创建对象时,默认执行无参构造方法来完成对象的创建(反射)

5.2.基于XML—注入属性(属性赋值)

DI:依赖注入,它是IOC的一个具体操作

分类

1.使用set方法进行注入

2.使用构造器 进行注入

演示

属性注入通过

  • name:实体类属性名
  • value:属性类
   <bean id="book" class="com.wdzl.pojo.Book">
        <!--使用set方法进行注入-->
<!--        <property name="name" value="Java从入门到入土"></property>-->
<!--        <property name="author" value="赵童"></property>-->
<!--    </bean>-->


        <!--使用构造器-name进行注入-->
<!--    <constructor-arg name="name" value="java宝典"></constructor-arg>-->
<!--    <constructor-arg name="author" value="赵童"></constructor-arg>-->


        <!--使用构造器-index进行注入-->
    <constructor-arg index="0" value="java宝典"></constructor-arg>
    <constructor-arg index="1" value="赵童"></constructor-arg>
    </bean>

5.2.1.构造方法注入

构造方法注入通过

<!--使用构造器-index进行注入-->
<constructor-arg index="0" value="java宝典"></constructor-arg>
<constructor-arg index="1" value="赵童"></constructor-arg>

5.2.2.P空间命名注入

1.引入约束

xmlns:p="http://www.springframework.org/schema/p"

2.标签

<bean id="book" class="com.wdzl.pojo.Book" p:name = "Java入门宝典" p:author="昭通">
    </bean>

5.2.3.特殊符号注入

    <bean id="book" class="com.wdzl.pojo.Book">
        <property name="name">
            <null></null>
        </property>
        <property name="author">
<!--            <value>"&lt;赵童&lt“</value>-->
            <value><![CDATA[<赵童>]]</value>
        </property>
    </bean>

1.null

2.使用转义字符

2-2.CDATA

5.2.6.外部bean

1.新建Module,添加相关依赖

2.按照三层架构创建:Dao,Service,Web,在Service层中添加对Dao的依赖(dao成员变量,对应的set方法)

3.配置相关信息

在这里插入图片描述

5.2.5.内部bean

在属性标签内部创建bean

1.在上一个演示案例的基础上,创建两个实体类Emp和Dept,其中Emp包含一个Dept对象属性

2.配置对象信息

在这里插入图片描述

里面 name=”dept“ 是属性, id=”dept“是创建的对象名,两者无需一致

5.2.6.级联操作

给两个对象的属性同时赋值

方式1:

<!--级联操作 1.保证ref与第一个bean id 一致-->
    <bean id="dept" class="com.wdzl.pojo.Dept">
        <property name="deptName" value="研发部"></property>

    </bean>
    <bean id="emp" class="com.wdzl.pojo.Emp">
        <!--注入属性-基本数据-->
        <property name="name" value="周杰伦"></property>
        <property name="gender"  value=""></property>
        <!--引用数据类型-->
        <property name="dept" ref="dept">

        </property>
    </bean>
</beans>

方式2:

    <!--        2.把属性移到引用数据类型下,name变成dept.deptName-->
    <bean id="dept" class="com.wdzl.pojo.Dept">

    </bean>
    <bean id="emp" class="com.wdzl.pojo.Emp">
        <!--注入属性-基本数据-->
        <property name="name" value="周杰伦"></property>
        <property name="gender"  value=""></property>
        <!--引用数据类型-->
        <property name="dept" ref="dept">
        </property>
        <property name="dept.deptName" value="运营部"></property>
    </bean>
</beans>
注意事项

针对方式2:一定要提供get、set方法,否则配置文件中的某些属性就会报红。

5.2.7.数组、集合方式的注入

<bean id="demo" class="com.wdzl.pojo.Demo">
<!--字符串数组-->
    <property name="strings">
        <array>
            <value>你好</value>
            <value>Hello</value>
        </array>
    </property>
    
    
    <!--List集合-->
    <property name="list"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值