Spring框架详解

简介

Spring5框架

内容介绍:

1.Spring概念

2.IOC容器

3.Aop

4.JDBCTEmplate

5.事物管理

6.Spring5新特性



一.Spring框架概述


1.概述


1.Spring框架是轻量级的JavaEE框架

2.Spring可以解决企业应用开发的复杂性

3.Spring有两个核心部分:IOC和Aop

(1)IOC:控制反转,把创建对象的过程交给Spring进行管理

(2)Aop:面向切面,不修改源代码进行功能增强

4.Spring特点

(1)方便解耦,简化开发

(2)Aop变成支持

(3)方便程序测试

(4)方便和其他框架进行整合

(5)方便进行事物操作

(6)降低API开发难度

5.Spring5



2.入门案例

(1)下载spring

image-20220314143447272

image-20220314143522845

image-20220314143622695

image-20220314144841240

image-20220314144949337

最后是这个网址

https://repo.spring.io/ui/native/release/org/springframework/spring/

image-20220314150504340

下载解压

image-20220314151754577

(2)创建新的项目

(3)导入jar包

image-20220314153934649

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWSNjI6C-1649754754216)(https://gitee.com/yan-chaochao/typora-library/raw/master/typora-library/image-20220314212314473.png)]

把所需的jar包导入其中

导入流程:

在项目文件夹中建立lab文件夹

把jar包放入文件夹中

image-20220314213114546

image-20220314213129097

(4)创建普通类

在这个类中创建普通方法

(5)创建Spring配置文件

在配置文件中配置创建的对象

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

(6)测试代码编写

二.IOC容器

1.IOC底层原理

(1)什么是IOC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

one:控制反转,把对象的创建和对象的调用过程交给Spring进行管理

two:使用IOC的目的:为了耦合度降低

three:做入门案例就是IOC的实现

(2)IOC底层原理

(1)xml解析,工厂模式,反射

(3)画图讲解IOC底层原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SDr4j6ah-1649754754217)(https://gitee.com/yan-chaochao/typora-library/raw/master/typora-library/image-20220316111726329.png)]

IOC过程

(1)配置xml文件,配置创建的对象

image-20220316112411751

(2)有service类和dao类,创建工厂类

image-20220316112721282


2.IOC接口(BeanFactory)

1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

2.Spring提供IOC容器实现的两种方式:(两个接口

(1)BeanFactory:

IOC容器中最基本实现方式,时Spring内部使用的接口,不提供开发人员进行使用

**特点:**加载配置文件的时候不会去创建对象,在获取对象(使用)才会去创建对象

(2)ApplicationContext:

BeanFactory接口的子接口,提供更多更强大的功能,一般有开发人员进行使用

**特点:**加载配置文件时候就会把在配置文件的对象进行创建

3.ApplicationContext接口有实现类

image-20220316114527826

FlieSystemXmlApplicationContext对应电脑的盘符路径

ClassPathXmlApplicationContext类路径


3.IOC操作Bean管理(基于xml)

(1)Bean管理定义:

Bean管理指的是两个操作

1.Spring创建对象

2.Spring注入属性

(2)Bean管理操作的两种方式

1.基于xml方式创建对象

2.基于注解方式的实现
1.基于xml配置文件方式的实现
<!--配置User对象创建-->
    <bean id = "user" class="com.spring.User"></bean>

(1)在Spring中使用bean标签,在标签里面添加对应的属性,就可以实现对象的创建

(2)在bean标签中有许多的属性,介绍常用的属性

*id属性:唯一标识

*class属性:类全路径(包类路径)

*name属性:和id一样,但是在name中可以加入些特殊符号

(3)创建对象的时候,默认是执行无参数构造方法

2.基于xml方式注入属性

(1)DI:依赖注入,就是注入属性

3.第一种注入方式:使用set方法进行注入

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

image-20220316194248500

(2)在Spring配置文件配置对象的创建,配置属性注入

image-20220316194814737

最后测试:

image-20220316202247204

image-20220316202302048

4.第二种注入方式:通过有参构造注入

(1)创建类,定义属性,创建属性对应有参数构造方法

image-20220316202928176

(2)在Spring文件中进行配置

image-20220316204015005

测试:
image-20220316204429603

5.p名称空间注入(了解)

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

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

image-20220316204924233

第二步:进行属性注入,在bean标签里面进行操作

image-20220316205240433

测试:
image-20220316205335414

(3)IOC操作Bean管理(xml注入其他类型的操作)

字面量

one:null值

eg:
image-20220316220057058

image-20220316220409873

测试:

image-20220316220632665

two:属性值包含特殊符号
1.把<>进行转义&lt;&gt;

image-20220316222400727

2.把带特殊符号内容写到CDATA

image-20220316222546173

测试:(两个的输出结果都一样)

image-20220316222636720

three:注入属性-外部bean

1.创建两个类service和dao类

2.在service调用dao里面的方法

3.在Spring配置文件中进行配置

image-20220317192720503

image-20220317192736845

image-20220317192744546

测试:
image-20220317192825321

four:注入属性-内部bean
  1. 一对多关系:部门和员工

    一个部门有多个员工,一个员工属于一个部门

    部门是一,员工是多

  2. 在实体类之间表示一对多的关系,员工表示所属部门,使用对象类型属性进行表示

  3. 在Spring的配置文件中进行配置

image-20220317195858214

image-20220317195915061

image-20220317195933962

测试:

image-20220317200150961

five:注入属性-级联赋值

1.第一种写法

image-20220317201958522

image-20220317202007299

image-20220317202029413

测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SceNe7Ei-1649754754226)(https://gitee.com/yan-chaochao/typora-library/raw/master/typora-library/image-20220317202126805.png)]

2.第二种写法

Dept.java

Testbean.java同上

image-20220317202252115

image-20220317202303036

测试:
image-20220317202334223


(4)IOC操作Bean管理(xml注入集合属性)

  1. 注入数组类型属性

  2. 注入List集合类型属性

  3. 注入Map集合类型属性

1.创建类

定义数组,List,Map,Set类型的属性,生成对应的set方法

image-20220317205936079

package com.spring.collectiontype;

import java.nio.MappedByteBuffer;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author yanchaochao
 * @date 2022/3/17 20:34
 */
public class Stu {
    //1.数组类型
    private String[] courses;

    //2.list集合类型属性
    private List<String> list;

    //3.创建Map集合属性
    private Map<String,String> maps;

    //4.set集合类型
    private Set<String> sets;



    public void setCourses(String[] courses) {
        this.courses = courses;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }

    public void setSets(Set<String> sets) {
        this.sets = sets;

    }

    //测试
    public void test(){
        System.out.println(Arrays.toString(courses));
        System.out.println(list);
        System.out.println(maps);
        System.out.println(sets);
    }
}
2.在spring配置文件进行配置

image-20220317213021028

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

        <!--1.集合类型属性注入-->
        <bean id="stu" class="com.spring.collectiontype.Stu">

                <!--数组类型属性注入-->
                <property name="courses">
                        <array>
                                <value>java</value>
                                <value>c</value>
                                <value>c++</value>
                                <value>算法</value>
                                <value>mysql</value>
                        </array>
                </property>

                <!--list类型属性注入-->
                <property name="list">
                        <list>
                                <value>张三</value>
                                <value>小三</value>
                        </list>
                </property>

                <!--map类型属性注入-->
                <property name="maps">
                        <map>
                                <entry key="JAVA" value="java"></entry>
                                <entry key="C" value="c"></entry>
                        </map>
                </property>

                <!--set类型属性注入-->
                <property name="sets">
                       <set>
                               <value>MySQL</value>
                               <value>Redis</value>
                       </set>
                </property>
        </bean>
</beans>

测试:

image-20220317213049666

package com.spring.testdemo;

import com.spring.collectiontype.Stu;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author yanchaochao
 * @date 2022/3/17 21:19
 */
public class Testcollectiontype {
    @Test
    public void testCollection(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        Stu stu = context.getBean("stu", Stu.class);
        stu.test();

    }
}
3.在集合里设置对象类型值
<!--创建多个course对象-->
        <bean id="course1" class="com.spring.collectiontype.Course">
                <property name="cname" value="Spring5框架"></property>
        </bean>
        <bean id="course2" class="com.spring.collectiontype.Course">
                <property name="cname" value="MySQL数据库"></property>
        </bean>



 <!--注入list集合类型,值是对象-->
                <property name="courseList">
                        <list>
                                <ref bean="course1"></ref>
                                <ref bean="course2"></ref>
                        </list>
                </property>


Course.java


package com.spring.collectiontype;

/**
 * @author yanchaochao
 * @date 2022/3/17 21:40
 */
public class Course {
    private  String cname;//课程名称

    public void setCname(String cname) {
        this.cname = cname;
    }

    @Override
    public String toString() {
        return "Course{" +
                "cname='" + cname + ''' +
                '}';
    }
}



Stu.java


package com.spring.collectiontype;

import java.nio.MappedByteBuffer;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author yanchaochao
 * @date 2022/3/17 20:34
 */
public class Stu {
    //1.数组类型
    private String[] courses;

    //2.list集合类型属性
    private List<String> list;

    //3.创建Map集合属性
    private Map<String,String> maps;

    //4.set集合类型
    private Set<String> sets;

    //学生所学多门课程
    private List<Course>courseList;
    public void setCourseList(List<Course> courseList) {
        this.courseList = courseList;
    }

    public void setCourses(String
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,旨在简化企业级应用程序的开发。它提供了一种轻量级的解决方案,通过依赖注入和面向切面编程等技术来解决传统Java开发中的一些繁琐问题。 Spring框架的核心特点包括: 1. 控制反转(IoC):Spring实现了控制反转,将对象之间的依赖交给容器来管理,降低了组件之间的耦合性,提高了代码的可重用性和可维护性。 2. 依赖注入(DI):Spring通过依赖注入机制来完成对象之间的依赖关系注入,开发人员只需要声明依赖,而不需要自己实例化对象,提高了代码的可测试性和可插拔性。 3. 面向切面编程(AOP):Spring支持面向切面编程,通过拦截器等机制来实现横切关注点的解耦,提高了代码的模块化和复用性。 4. 组件化:Spring提供了一些重要的组件,如控制器、模型、视图等,用于构建Web应用程序,并通过Spring MVC框架提供了一套强大而灵活的Web开发解决方案。 5. 事务管理:Spring提供了事务管理的支持,可以轻松地在代码中声明式地管理事务,保证数据的一致性和完整性。 6. 持久化支持:Spring集成了多种持久化框架,如Hibernate、MyBatis等,使得数据库操作更加便捷和高效。 7. 安全性管理:Spring提供了一套完整的安全性管理解决方案,包括身份认证、权限控制等,保护应用程序的安全性。 总而言之,Spring框架通过提供一系列功能和组件,简化了企业级应用程序的开发和管理。它的优点包括代码的可测试性、可重用性、可维护性和扩展性。同时,Spring拥有庞大的社区支持和丰富的库,为开发人员提供了充分的资源和帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值