2.Spring IoC快速入门

2.Spring IoC快速入门

Spring核心内容的基本开发步骤:
下载开发包,导入jar包
编写代码(基础代码和调用代码)
编写配置文件

2.1.Spring的开发包
开发包的下载
在这里插入图片描述
Spring官方:http://spring.io/

在这里插入图片描述
在这里插入图片描述
下载网址:http://repo.spring.io/libs-release-local/org/springframework/spring/

官方最新版本:
在这里插入图片描述
不同系列版本对开发环境的最低需求:
在这里插入图片描述

我采用的版本是:3.2.x的版本(企业主流版本,框架整合也需要对应版本jar):
在这里插入图片描述
Spring3.2版本开发包目录结构:

在这里插入图片描述
规范文档中基本内容了解:
在这里插入图片描述
第三章 核心技术 (IoC和AOP)
第四章 数据访问 持久层 (JdbcTemplate、声明式事务管理)
第五章 表现层 SpringMVC
第六章 集成 零散技术 , 需要在项目实战讲解

开发过程中还需要其他开源技术框架依赖Jar包集(dependencies,作用是方便依赖的其他技术的jar的导入):

在这里插入图片描述
2.2.开发环境测试搭建(Jar的导入)
新建Web工程:spring3_day1,导入jar:

1.Spring项目的核心容器的最基本Jar包(4个):

在这里插入图片描述
在这里插入图片描述
2.Spring框架所需的日志包(2个,依赖jar库中找):
默认采用commons-logging日志框架+log4j的日志实现,还需要添加log4j的配置文件。
在这里插入图片描述
关于java日志的补充阅读:

Java的常见的日志系统有log4J,jdk-jul,logback等,这些日志系统各自独立,编程方式也不一致。如果你一个系统要用到多个框架库,而这些框架库又可能要用不同的日志系统,那么你一个系统中就得使用多套日志系统,那多套日志系统如何融合在一起是个很大的问题。
那么如何解决呢?进行抽象,抽象出一个接口层,对每个日志实现都适配或者转接,这样这些提供给别人的库都直接使用抽象层即可,不需要关注具体的日志实现。常见的日志抽象出来的框架有Apache commons-logging和slf4j。
这里有个故事:最新是开源社区提供了commons-logging抽象,被称为JCL日志框架,出色地完成了兼容主流的日志实现(log4j、JUL、simplelog),基本一统江湖,就连顶顶大名的spring也是依赖了JCL。
看起来事物确实是美好,但是美好的日子不长,接下来另一个优秀的日志框架slf4j的加入导致了更加混乱的场面。比较巧的是slf4j的作者(Ceki Gülcü)就是log4j的作者,他觉得JCL不够优秀,所以他要自己搞一套更优雅的出来,于是slf4j日志体系诞生了,并为slf4j实现了一个亲子——logback,确实更加优雅。
但是由于之前很多代码库已经使用JCL,虽然出现slf4j和JCL之间的桥接转换,但是集成的时候问题依然多多,对很多新手来说确实会很懊恼,因为比单独的log4j时代“复杂”多了,可以关注下这个,抱怨声确实很多。到此本来应该完了,但是Ceki Gülcü觉得还是得回头拯救下自己的“大阿哥”——log4j,于是log4j2诞生了,同样log4j2也参与到了slf4j日志体系中。日志体系的江湖又将面临血雨腥风的混乱了。

导好的jar:
在这里插入图片描述

2.3.业务代码编写(业务层、数据持久层)
采用的示例业务是模拟用户登录。
service和dao:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试代码:

【思考分析】
代码过于耦合,上层代码过度依赖于下一层代码的实现:
UserDAO userDAO = new UserDAOImpl();
如果要更换实现类,必须要修改原来的业务代码!

解决方案:采用IoC(Inverse of Control,控制反转)的思想。
简单的说就是引入工厂(第三者),将原来在程序中手动创建管理的UserDAO对象,交给工厂来创建管理。在Spring框架中,这个工厂就是Spring中的工厂,因此,也可以说,将创建管理UserDAO对象的控制权被反转给了Spring框架了。
在这里插入图片描述

IoC中文翻译为控制反转,指以前程序自己创建对象,现在将创建对象的控制权交给了第三方(Spring)了。
IoC底层实现:工厂+ 反射 + 配置文件。

2.4.IoC控制反转的实现
2.4.1.Spring核心配置文件的编写
IoC控制反转的理解和实现
习惯上: 在src建立applicationContext.xml (位置:src目录或者 WEB-INF目录)
在这里插入图片描述
引入xml的头部信息bean schema约束,可以参考规范文档中的的xsd-config.html
在这里插入图片描述
找到下列章节的示例,拷贝到工程中:
在这里插入图片描述
结果如下:

<?xml version="1.0" encoding="UTF-8"?>

配置本地提示:
在这里插入图片描述

核心配置文件编写:
在这里插入图片描述
2.4.2.通过Spring的工厂获取Bean完成相关操作
基本过程是:在程序中读取Spring配置文件,得到Spring的Bean工厂,通过Spring框架获得Bean,完成相应操作

service代码编写:

在这里插入图片描述
测试:

在这里插入图片描述
2.5.DI依赖注入的实现
DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件(简单的说,可以将例外一个bean对象动态的注入到另外一个bean中。)

【面试题】IoC和DI的区别 ?
DI和IoC是同一件事情,都是将对象控制权交给第三方(Spring)管理,只是站在不同角度而已。
IoC:

在这里插入图片描述
在这里插入图片描述
耦合代码变成依赖注入代码的方法:
在这里插入图片描述
即:Spring创建了Service、DAO对象,在配置中将DAO传入Servcie,那么Service对象就包含了DAO对象的引用。

业务代码改造:
在这里插入图片描述

service:
在这里插入图片描述
核心文件配置:
在这里插入图片描述
2.6.Spring的工厂
ApplicationContext直译为应用上下文,是用来加载Spring框架配置文件,来构建Spring的工厂对象,它也称之为Spring容器的上下文对象,也称之为Spring的容器。
ApplicationContext 只是BeanFactory(Bean工厂,Bean就是一个java对象) 一个子接口:
在这里插入图片描述
为什么不直接使用顶层接口对象来操作呢?
在这里插入图片描述
ApplicationContext 更加强大, 所以现在开发基本没人使用BeanFactory。
提示:后面还有个FactoryBean,注意区别。
【示例了解】

在这里插入图片描述
2.7.Spring工厂的直接获取(两种方式)
在这里插入图片描述
如何选择:
如果applicationContext.xml 在 src下, ClassPathXmlApplication读取
如果applicationContext.xml 在WEB-INF下,FileSystemXmlApplicationContext读取

bean获取的两种方式:
在这里插入图片描述
常用根据名称获取(id/name)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值