目录
传统Javaweb开发的困惑
loC、DI和AOP思想提出
Spring框架的诞生
传统Javaweb开发的困惑
问题一:层与层之间紧密耦合在了一起,接口与具体实现紧密耦合在了一起
解决思路:程序代码中不要手动new对象,第三方根据要求为程序提供需要的Bean对象
问题二:通用的事务功能耦合在业务代码中,通用的日志功能耦合在业务代码中
解决思路:程序代码中不要手动new对象,第三方根据要求为程序提供需要的Bean对象的代理对象
loC、DI和AOP思想提出
loC控制反转思想的提出
DI 依赖注入思想的提出
AOP 面向切面思想的提出
框架概念的出现
框架(Framework),是基于基础技术之上,从众多业务中抽取出的通用解决方案;
框架是一个半成品,使用框架规定的语法开发可以提高开发效率,可以用简单的代码就能完成复杂的基础业务;
框架内部使用大量的设计模式、算法、底层代码操作技术,如反射、内省、xml解析、注解解析等;
框架一般都具备扩展性;有了框架,我们可以将精力尽可能的投入在纯业务开发上而不用去费心技术实现以及一些辅助业务。
Java中常用的框架:
不同语言,不同领域都有属于自己的框架,使用框架开发是作为程序员的最基础的底线。Java语言中的框架,可以分为基础框架和服务框架:
-基础框架:完成基本业务操作的框架,如MyBatis、Spring、SpringMVC、Struts2、Hibernate等
-服务框架:特定领域的框架,一般还可以对外提供服务框架,如MQ、ES、Nacos等
Spring框架的诞生
spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及WebMVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决方案都是依附于在Spring Framework基础框架的。
1)导入Spring的jar包或Maven坐标;
2)定义UserService接口及其UserServicelmpl实现类;
3)创建beans.xml配置文件,将UserServicelmpl的信息配置到该xml中;
4)编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象。
BeanFactory快速入门
上面使用BeanFactory完成了loC思想的实现,下面去实现以下DI依赖注入:
1)定义UserDao接口及其UserDaolmpl实现类;
2)修改UserServicelmpl代码,添加一个setUserDao(UserDaouserDao)用于接收注入的对象;
3)修改beans.xml配置文件,在UserDaolmpl的<bean>中嵌入<property>配置注入;
4)修改测试代码,获得UserService时,setUserService方法执行了注入操作。
BeanFactory与ApplicationContext的关系
1)BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring 容器;
2)ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;
3) Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。
4)Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器一创建就将Bean都实例化并初始化好。
BeanFactory与ApplicationContext的关系
ApplicationContext除了继承了BeanFactory外,还继承了ApplicationEventPublisher(事件发布器)、ResouresPatternResolver(资源解析器)、MessageSource(消息资源)等。但是ApplicationContext的核心功能还是BeanFactory.
基于xml的Spring应用