1、为什么要用spring?

spring是一个Java开源框架,致力于简化Java开发,用于替代重量级的企业级Java技术(如EJB)。为了降低Java开发的复杂性,spring采取了以下几种策略:

(1)轻量级非入侵式编程:spring只需要普通的Java类,不需要实现spring规范的接口或者继承spring规范的类,除了可能会使用spring注解,其他并没有任何限制,这个类在非spring应用中可以发挥同样的作用。

(2)依赖注入实现松耦合:通过IOC容器管理类与类之间的依赖关系,不需要对象自己管理。

(3)面向切面编程实现代码重用:通过AOP将日志、事务、安全等系统服务抽取出来,与核心业务逻辑分离,简化业务开发。

2、IOC

IOC即控制反转,即原来需要你自己主动去获取需要的对象,现在只要你告诉容器你需要什么对象,容器自动给你注入一个,主要目的在于解耦。

IOC容器的实现(简要说明下):

(1)xml配置文件的解析:通过BeanDefinition把配置文件的bean转换成容器的内部表示,以bean的名称为key存储到Map中;

(2)bean的加载:首先判断bean是单例还是原型,如果是单例,在IOC容器启动的时候创建(除非lazy-init设置为true,则在geBean调用的时候创建),创建的单例对象存放在一个 HashMap 中,所以不会被GC回收,以后获取单例对象都从缓存中获取,单例对象在IOC容器销毁的时候销毁;如果是多例,则在getBean调用的时候创建,IOC容器不保持对多例对象的引用,由GC自动回收。

(3)bean创建的方式:如果配置了lookup-method(获取器注入,定义一个返回值为某种类型的方法,但实际返回的bean是在配置文件中定义的)和replace-method(方法替换,运行时用配置中的新方法替换现有方法),则采用cglib动态代理技术创建对象,它并不要求委托类必须实现接口,底层采用asm字节码生成框架生成代理类的字节码,否则采用Java反射创建实例对象。

3、AOP

AOP即面向切面编程,把应用中通用的功能(事务、日志、安全等)提取出来,模块化为一个特殊的类(通知),通过声明的方式定义通知在何处使用(切点)。

当被通知的方法被调用时,spring会为目标对象动态地创建一个代理对象,拦截对目标对象方法的调用,执行切面逻辑(通知+切点),再把调用转发给真正的目标。

4、SpringMVC

springmvc是一个基于mvc模式的web框架,能用它构建灵活和松耦合的web应用程序。

它有一个前端控制器DispatcherServlet,捕获来自浏览器的http请求,根据请求的URI去查询处理映射器,根据处理映射器返回的结果,调用合适的控制器处理请求,处理完成后会将模型(数据)和视图(JSP)返回给DispatcherServlet,DispatcherServlet会去查询视图解析器确定真正的视图,把模型数据交给真正的视图处理后返回给浏览器。

springmvc优点:借助注解方式,可以非常灵活方便地开发处理请求的控制器,参数注入,数据校验等,低入侵性,提供了近似POJO的开发模式;支持多种视图技术;与spring整合方便。

5、spring中用到的设计模式(待补充)

6、BeanFactory和ApplicationContext

BeanFactory是IOC容器的核心接口, 它定义了IOC的基本功能,我们看到它主要定义了getBean方法。Spring 使用 BeanFactory 来实例化、配置和管理 Bean。通过BeanFactory启动IoC容器时,并不会初始化配置文件中定义的Bean,初始化动作发生在第一个调用时。

ApplicationContext由BeanFactory派生而来,除了包含BeanFactory的功能,也继承了容器的高级功能,包括支持Aop等。ApplicationContext与BeanFactory相反,它是在容器启动时,一次性创建了所有的Bean,唯一的不足是占用内存空间,一般都是用ApplicationContext。

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐