Spring-1-认识Spring框架与ApplicationContext对象

目录

1、Spring 概述

1.1 Spring 框架是什么

1.2 Spring 优点

1.2.1 轻量

1.2.2 针对接口编程,解耦合

1.2.3 AOP 编程的支持

1.2.4 方便集成各种优秀框架

1.3 Spring 体系结构

2、IoC 控制反转

2.1 开发工具准备

2.2 Spring 的第一个程序

2.2.1 用idea创建一个空project项目, 同时向其中添加一个module: 基于Maven的Spring项目

2.2.2 创建完成之后的项目结构图如下

2.2.3 使用IOC由Spring创建对象的步骤如下

2.2.4 (1)在 pom.xml 文件中引入 maven 依赖

2.2.4 (2)定义接口与实体类

2.2.4 (3)创建 Spring 配置文件

2.2.4 (4)在 myTest.java 测试类中使用由Spring容器帮助我们创建好的bean做测试

2.2.5 使用 spring 创建非自定义的类对象

2.3 ApplicationContext容器接口及其它的实现类

2.3.0 ApplicationContext 接口(容器)

2.3.1 配置文件在类路径下

2.3.2 ApplicationContext 容器中对象的装配时机

2.3.4 使用 spring 容器创建的 java 对象

2.3.5 如何查看Spring容器中有多少个java对象和这些java对象详细信息的输出


【参考B站动力节点教学视频-王鹤老师】https://www.bilibili.com/video/BV1nz4y1d7uy?p=1

1、Spring 概述

1.1 Spring 框架是什么

Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明,即:在 Spring 中说明对象(模块)的关系。Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了,而是由 Spring 容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务 “混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

Spring官网https://spring.io/

1.2 Spring 优点

Spring 是一个框架,是一个半成品的软件。有 20 多个模块组成。它是一个容器管理对象,容器是装东西的,Spring 容器不装文本、数字,装的是对象。 Spring 是存储对象的容器。

1.2.1 轻量

Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核心功能的所需的 jar 总共在 3M 左右。Spring 框架运行占用的资源少,运行效率高,不依赖其他 jar。

1.2.2 针对接口编程,解耦合

Spring 提供了 Ioc 控制反转,由容器管理对象,对象的依赖关系。原来在程序代码中的对象创建方式,现在由容器完成。对象之间的依赖解耦合。

1.2.3 AOP 编程的支持

通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明 式方式灵活地进行事务的管理,提高开发效率和质量。

1.2.4 方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架(如 Struts,Hibernate、MyBatis)等 的直接支持。简化框架的使用。Spring 像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪 个框架,就把这个插头放入插线板。不需要可以轻易的移除。

1.3 Spring 体系结构

Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、提供 JVM 的代理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。

2、IoC 控制反转

控制反转(IoC,Inversion of Control),是一个概念,是一种思想,是指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的自动装配和自动管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。

IoC,意思是控制反转,它是一个概念,是一种思想,它的实现方式多种多样,当前比较流行的实现方式是【依赖注入】。

什么是依赖?依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。

Ioc 的实现:依赖注入 DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。

Spring 框架使用依赖注入(DI)实现 IoC。

Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系, Spring 使用” 依赖注入”的方式来管理 Bean 之间的依赖关系,使用 IoC 实现对象之间的解耦和。

2.1 开发工具准备

开发工具:idea2017 以上。依赖管理:maven3 以上 。jdk:1.8 以上。

2.2 Spring 的第一个程序

2.2.1 用idea创建一个空project项目, 同时向其中添加一个module: 基于Maven的Spring项目

  

    

   

    

2.2.2 创建完成之后的项目结构图如下

【此时,自己新建一个resources资源目录,同时把它 mark directory as ...】

 

2.2.3 使用IOC由Spring创建对象的步骤如下

2.2.4 (1)在 pom.xml 文件中引入 maven 依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wind</groupId>
    <artifactId>ch01-hello-spring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <!--Spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.2</version>
        </dependency>

        <!--单元测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2.4 (2)定义接口与实体类

public interface SomeService { 
    void doSome();
}

public class SomeServiceImpl implements SomeService { 
    public SomeServiceImpl() {
        super();
        System.out.println("SomeServiceImpl无参数构造方法");
    }

    @Override
    public void doSome() { 
        System.out.println("====业务方法doSome()===");
    } 

}

2.2.4 (3)创建 Spring 配置文件

在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为 applicationContext.xml。spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。

<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。

id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。

class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

 

2.2.4 (4)在 myTest.java 测试类中使用由Spring容器帮助我们创建好的bean做测试

2.2.5 使用 spring 创建非自定义的类对象

(1)比如:spring 配置文件加入 java.util.Date 定义: <bean id="myDate" class="java.util.Date" />

(2)MyTest 测试类中:调用 getBean(“myDate”);    获取日期类对象。

2.3 ApplicationContext容器接口及其它的实现类

2.3.0 ApplicationContext 接口(容器)

ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容 器”的角色。其实现类有两个。

2.3.1 配置文件在类路径下

若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。

2.3.2 ApplicationContext 容器中对象的装配时机

ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一 次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可,执行效率较高,但占用内存。

2.3.4 使用 spring 容器创建的 java 对象

2.3.5 如何查看Spring容器中有多少个java对象和这些java对象详细信息的输出

Spring config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
int nums = ac.getBeanDefinitionCount();
String names [] = ac.getBeanDefinitionNames();

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值