Spring 5 笔记 - 入门与IOC

1. Spring 入门简介

Spring:轻量级、开源的JavaEE框架, 解决企业应用的复杂性。包括IOC和AOP两个核心部分。

IOC: 控制反转,把创建对象和对象之间的调用的过程都交给Spring 进行管理,使耦合度降低。

AOP:面向切面,不修改源代码进行功能增强。

Spring特点:1. 解耦; 2. AOP编程支持; 3.方便测试(Junit); 4.方便整合; 5.方便事务操作; 6.降低API开发难道。

选取Spring版本5.X

相关包下载:

进入Spring官网:Spring | Home

获得下载地址:https://repo.spring.io/artifactory/release/org/springframework/spring/

下载完后解压:

2. IOC实例

1.建Java项目

  1. 引入Jar包, 新建lib文件夹,copy相关包:

引入如下基础包:

common-logging-xxx.jar 包下载地址:

Apache Commons Logging - Download Apache Commons Logging

  1. 把上面的Jar包导入到项目中。

点击“File --> Project Structure”, 然后:

点“+”号,选 "Attach Files or Directories", 导入上面的5个Jar包:

4.创建普通类

5.创建Spring配置文件

  1. 测试代码

实例完成。

3. IOC 原理

3.1 IOC 底层原理:xml解析、工厂模式、反射。

xml解析:读取配置文件

IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。Spring 提供IOC容器实现的两种方式(两个接口):

(1) BeanFactory: IOC容器的基本实现,是Spring内部使用的接口,不提供开发人员进行使用

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

BeanFactory实现类:在“BeanFactory” 上 “Ctrl + H”打开:

(2) ApplicationContextBeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用

特点:加载配置文件的时候就把配置文件中的对象进行创建。(有些对象可以运用于服务器启动时创建,加快运用是的速度)

ApplicationContext的实现类:在 “ApplicationContext”上“Ctrl + H”打开:

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

4.1 IOC操作(创建对象,注入属性)

(1)创建对象

(2)注入属性

Bean管理操作有两种方式:

(1)基于xml配置文件方式实现

(2)基于注解方式实现

基于xml创建对象

  • 创建对象时候,默认是执行无参构造方法完成对象创建。

基于xml注入属性

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

第一种方式,使用set方法注入。

第二种方式,有参构造方式注入。

P名称空间注入,简化xml属性注入(实践中用得少):

发现识别不了p命名空间得URL,如下:

可以参考: IntellijIdea解决xml文件中出现“uri is not registered”_sfhappy23的博客-CSDN博客

此问题尚未解决。。。

4.2 IOC操作(注入其它类型的属性)

4.2.1 字面量

(1)null值

(2)属性中包含特殊符号

方法一:把特殊字符进行转义

方法二:如下:

4.2.2 注入属性-外部bean

4.2.3 注入属性-内部bean

4.2.4 注入属性-级联赋值

(1)第一种实现方式

其它同上面外部bean一样,就配置文件不同:

(2)第二种实现方式

记得要加入如下的get方法才可以用这个种级联赋值:

4.3 IOC操作(xml注入集合属性)

  1. 注入数组类型属性
  2. 注入List集合类型属性
  3. 注入Map集合类型属性
  4. 注入Set集合类型属性

实例:

  1. 在集合里面注入对象类型值

  1. 把集合注入部分提取出来

(1)在Spring配置文件中引入名称空间,和配置bean

(2)其它文件同上面的例子,执行结果:

4.4 IOC操作(Bean管理:FactoryBean)

  1. Spring 有两种类型的Bean,一种是普通Bean,一种是工厂Bean(FactoryBean)
  2. 普通Bean:在配置文件中定义的Bean类型就是返回类型
  3. 工厂Bean:在配置文件中定义的Bean类型可以和返回的类型不一样。

工厂Bean例子:

(1)第一步,创建类,让这个类作为工厂Bean,实现接口FactoryBean

(2)第二步,实现接口里面的方法,在实现的方法中定义返回的bean类型

4.5 IOC操作(Bean作用域)

在Spring里面,可以设置创建bean实例时单实例还是多实例

(1)在Spring 里, 默认情况下bean是单实例对象。

(2)设置多实例:在Spring 的配置文件bean标签里面有属性(scope)用于设置单实例还是多实例。

scope属性值:

  1. singleton, 默认值,表示单实例对象,在加载Spring配置文件时候就会创建单实例对象。
  2. prototype,表示多实例对象,不是在加载Spring配置文件时候创建对象,在调用getBean方法时候创建多实例对象。
  3. request,表示一次请求, 每次请求时创建对象。
  4. session,表示一次会话, 每次会话时创建对象。

例子(同上,差别如下):

4.6 IOC操作(Bean生命周期)

Bean生命周期:对象从创建到销毁的过程:

(1)通过构造器创建bean实例(无参构造器)

(2)为bean的属性设置值和对其它bean引用(调用set方法)

(3)调用bean的初始化的方法(需要进行配置初始化的方法)

(4)bean可以使用了(对象获取到了)

(5)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

例子:

加上Bean的后置处理器后,bean的生命周期一共有7步:

(1)通过构造器创建bean实例(无参构造器)

(2)为bean的属性设置值和对其它bean引用(调用set方法)

(3)把bean的实例传递给bean的前后置处理器的方法(postProcessBeforeInitialization方法

(4)调用bean的初始化的方法(需要进行配置初始化的方法)

(5)把bean的实例传递给bean的后后置处理器的方法(postProcessAfterInitialization方法

(6)bean可以使用了(对象获取到了)

(7)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

例子(创建类,实现接口BeanPostProcessor,创建后置处理器):

同上面的例子,变动如下:

4.7 IOC操作(xml自动装配,实际中用得不多。)

(1)概念:根据指定装配规则(属性名称或者属性类型),Spring自动将匹配地属性值进行注入。

(2)实现自动装配:在bean标签中加入属性autowire配置自动装配,autowire属性常用两个值:

  1. byName:根据属性名称注入,注入值bean的id值和类属性名称一样。
  2. byType:根据属性类型注入, 如果有两个同类型的bean,那么注入会报错

属性名称注入例子:

属性类型注入例子

其它文件一样,不同的如下:

4.8 IOC操作 (外部属性文件)

例子:

下载德鲁伊连接池的jar包

Druid(德鲁伊) 数据库连接池,是阿里巴巴开源的数据库连接池项目。下载地址:

Central Repository: com/alibaba/druid

(2)引入德鲁伊Jar包到项目

(3)配置properties属性文件

(4)引入外部属性文件配置德鲁伊数据库连接池(需要引入名称空间context)

5. IOC 操作 (Bean管理,基于注解)

IOC操作Bean管理(基于注解方式)

(1)格式:@注解名称(属性名称=属性值,属性名称=属性值)

(2)注解作用在类上面、方法上面和属性上面

(3)使用注解可以简化xml配置

(4)Spring针对Bean管理中创建对象提供的注解:

  1. @Component, 普通的组件上
  2. @Service, 一般用在业务层上
  3. @Controller, 一般用在Web层上
  4. @Repository,一般用在DO层上
  • 上面的四个注解功能是一样的,都可以用来创建Bean实例,只是方便用于区分用到不同的地方。

5.1 基于注解方式实现对象创建

(1)引入aop依赖

(2)开启组件扫描(需要引入名称空间context)

(3)创建类,在类上面添加创建对象的注解

5.2 开启组件扫描细节配置

  1. 示例1:

use-default-filters 的默认值是"true",表示默认情况下会扫描

  1. 示例2:

5.3 基于注解方式实现属性注入

(1)@AutoWired, 根据属性类型进行自动装配

存在弊端: 如果存在多个同类型的实现类,无法确定注入哪个, 会报错.

例子:

(2)@Qualifier,根据属性名称进行注入

@Qualifier注解要和上面的@AutoWired一起使用。

解决弊端: 结合@AutoWired使用, 可以明确哪个实现类.

示例:

其它同上,不同部分如下:

(3)@Resource, 可以根据类型注入,也可以根据名称注入

@Resource注解不是Spring中的, 而是javax中的对象.

示例:其它同上,不同如下

  1. 根据类型进行注入

  1. 根据名称进行注入

(4)@Value,注入普通类型属性

示例,其它同上,不同如下

5.4 完全注解开发(用配置类代替xml配置文件)

例子:其它同上,不同如下

(1)创建配置类,替代xml配置文件,删除了原来的xml配置文件

(2)编写测试类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值