Spring的理解:
1、 实现了工厂模式的工厂类,类名为BeanFactory(实际上就是一个接口),然后在配置文件中用<bean>来配置创建实例对象的类名和实例对象的属性
2、 提供对IOC的支持
3、 提供了对AOP的良好封装
Spring事务管理:
1、 基于XML配置文件的方式
2、 在业务逻辑的方法上进行@Transactional注解,将事务规则应用到业务逻辑中
Spring的作用域:
singleton(单例) ,prototype(原型) ,request,session,global session(application)
Spring是分层的JavaSE/EE full-stack轻量级开源框架,以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程为内核)。这里涉及到两个关键词,那就是Ioc和AOP,弄明白这两个知识点,Spring的核心也就掌握了一大半了。
一、IoC
所谓IoC就是inverse of control 控制反转,将对象的创建权(实例化) 交予spring框架创建过程。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。举例,我们在学习三层的时候都知道Service层的类要调用Dao的方法,必须在Service类中添加对Dao的引用,才能调用Dao的方法,下面我们就一起来回顾一下我们的引用方式:
Service层和Dao的依赖比较严重,为了使Service和Dao之间进行解耦,我们引入了工厂。
但是使用工厂也有相应的弊端:
1.工厂类依旧需要去了解具体的实现类以及其参数,当程序复杂度到一定程度时,工厂类依旧可能很复杂。
2.还是必须要有源码才能更新工厂类的代码,才能重新编译。
基于以上原因,我们引入了Spring IoC.
Spring IoC通过配置文件配置:
在配置文件中配置实体的Id和对应的实现类,然后通过API读取:
优点在于,不需要代码书写工厂类了,只是一个简单的XML配置文件,就搞定了
二、AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码,使用springAOP完成功能:性能监控、事务管理、日志记录、缓存等.
常用的spring注解有如下几种:
@Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写
@Service 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写
@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。
@RequestMapping 可以声明到类或方法上
@Scope在使用XML 定义Bean 时,可以通过bean 的scope 属性来定义一个Bean 的作用范围,
Spring注入方式:
1. 接口注入(不推荐)
2. getter,setter方式注入(比较常用)
3. 构造器注入(死的应用)
Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”
bean就相当于定义一个组件,这个组件是用于具体实现某个功能的。这里的所定义的bean就相当于给了你一个简洁方便的方法来调用这个组件实现你要完成的功能。
对于我们的spring最主要的应该就是由这些bean组成的bean工厂,每个bean实现一个功能
Spring在代码中获取bean的几种方式
方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport 方法四:继承自抽象类WebApplicationObjectSupport 方法五:实现接口ApplicationContextAware 方法六:通过Spring提供的ContextLoader
DispatcherServlet是前端控制器
- 用户发出http请求
- 前端控制器(DispatcherServlet)将请求分发给Spring,Controller(分发之前需要HandlerMapping进行映射,找到对应的Controller)
- Controller(相当于struts2的action)处理请求,能接受HttpServletRequest和HttpServletResponse
- 处理完请求之后返回ModelAndView对象给前端控制器(DispatcherServlet)
- 前端控制器将View对象渲染出的结果返回给用户