初识Spring

Spring

1、简介

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

Spring就是一个容器,用来存放同类内容的集合。

Spring是用来管理对象,目的是解耦,核心是IOC和AOP

1.1优点

1、Spring是一个开源免费的框架 , 容器 。

2、Spring是一个轻量级的框架 , 非侵入式的 。(开发简化)

3、控制反转 IoC(工厂模式) , 面向切面 Aop(代理模式)。

4、对事物的支持 , 对框架的支持。方便程序测试,便于集成各种框架。

1.2组成

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式 。

*数据模块(Data Access/Integration)

数据访问与集成模块,在这个模块中,有五个小模块:

  • JDBC (Java Database Connectivity),Java数据库连接

  • ORM (Object Relational Mapping), 对象关系映射

  • OXM (Object XML Mapping), 对象XML映射

  • JMS (Java Message Service),Java消息服务

  • Transactions事务

*Web模块

web模块中有四个模块:

  • Web

  • WebMVC

  • WebSocket

  • WebFlux

*切面模块(Aop,Aspects)

切面模块中有两个模块:

  • Aop : Aspect Oriented Programming , 面向切面编程 ,是对 OOP 的补充

  • Aspects : 切面

*工具模块(Instrumentation)

工具模块是java的接口,用来:

  • 监控代理

  • 事件日志记录

  • 代码覆盖率

*消息模块

        后补

*核心模块

        后补

*测试模块

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

        后补

1.3pom.xml相关依赖

        <!--基于maven依赖传递性,导入spring-context依赖可导入当前所需所有jar包-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.1</version>
    </dependency>
            <!--junit测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
     </dependency>
</dependencies>

2、基于XML管理bean

2.1、入门案例

创建Maven module

1、引入依赖

2、创建类HelloWorld

3、创建Spring的配置文件

resources下new→XML Configuration File→Spring Config

4、在Spring的配置文件中配置bean

5、创建测试类测试

输出

2.2、获取bean的三种方式(附带标签详解)

1、根据备案的id获取

如上:入门案例

2、根据bean的类型获取

注意:根据类型获取bean时,要求IOC容器中有且只有一个类型匹配的bean ​ 若有多个类型匹配的bean,此时抛出异常:NoUniqueBeanDefinitionException

 

3、根据bean的id和类型来获取

结论: ​ 根据类型来获取bean时,在满足bean唯一性的前提下其实只是看:[对象instanceof指定的类型]的返回结果,只要返回的是true就可以认定和类型匹配,能够获取到。

即通过bean的类型、bean所继承的类的类型、bean所实现的接口的类型都可以获取bean。

2.3、依赖注入之setter注入

创建Student类

根据bean的id和类型来获取

2.4依赖注入之构造器注入

在Student中添加有参构造

根据bean的id和类型来获取

2.5、为类类型属性赋值

如学生类Student: Integer sid;String sname;Integer age; Clazz clazz;

关联班级类Clazz:Integer clazzId;String clazzName;

方法1:引入外部以声明的bean

配置Clazz类型的bean:

 为Student中的clazz赋值:

根据bean的id和类型来获取

方法2:级联属性赋值

方法3:内部bean

2.6、为数组类型属性赋值

Student类中添加: private String[] hobby;

2.7、为集合类型属性赋值

方法1:Clazz类中添加:

private List<Student> students;

方法2:

 

2.8、为Map集合类型属性赋值

创建Teacher类:

private Integer tid;
private String tname;

在Student类中添加:

private Map<String, Teacher> teacherMap;

方法1:配置bean:

 

方法2:

2.9、P命名空间

2.10、引入外部属性文件

①加入依赖

<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!-- 数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.31</version>
</dependency>

②创建外部属性文件jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
jdbc.username=root
jdbc.password=root

③bean

④测试连接

2.11、bean的作用域

        后补

2.12、bean的生命周期

        后补

2.13、FactoryBean(工厂)

当我们使用第三方框架或者库时,有时候是无法去new一个对象的, 比如静态工厂,对象是不可见的,只能通过getInstance()之类方法获取, 此时就需要用到FactoryBean,通过实现FactoryBean接口的bean重写getObject()方法, 返回我们所需要的bean对象。

简单来说,FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是 getObject()方法的返回值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值