一. Spring 原理讲解 java
Spring 是一个轻量容器框架(开源);Spring的核心是 IoC(控制反转) 和 AOP(面向切面编程); 程序员
Spring 由7个模块组成:web
√ 什么是框架?spring
二. Spring IoC (控制反转) 数据库
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。编程
设计原理:把耦合从代码中移出去,放在同一的 XML 文件中,经过一个容器在须要的时候把这个依赖关系实现,及把须要的接口实现注入到须要它的类中。服务器
IoC 中最基本的 Java 技术就是"反射"编程,反射编程方式相对于正常的编程方式要慢十几倍,经过 SUN 改良以后反射方式生成的对象和普通方式生成的对象相差不大了(依然有一倍以上的差距);架构
控制反转通常分为两种类型app
三. Spring AOP (面向切面变成) 框架
AOP 是 Aspect Oriented Programming的缩写;AOP同OOP都是一种编程思想,且AOP 其实是OOP的一种延续,咱们用类比法进行理解:
AOP 同 OOP 的关联:1. 都是编程思想;
AOP 同 OOP 的区别:1. OOP关注的是纵向业务,而AOP关注的是横向业务;
2. 从业务角度来讲,OOP 是对实体业务属性和行为进行抽象封装,AOP面对的是在处理过程当中的某个步骤或阶段;
说明:
上图中将国内商务部、国际商务部和广告制做部归并(抽象)到商务部,以及将开发部、测试部、设计部归并(抽象)到技术部是用到了OOP 的编程思想;
国际商务部、国内商务部和开发部都有访问客户的业务,广告制做部和设计部,此时用抽象没法形象体现出来(同一类中的其余部门没有对应的业务),这里就可使用AOP 编程思想;
四. Spring 模块说明
Spring 框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了建立、配置和管理 Bean 的方式;组成 Spring 框架的每一个模块(或组件)均可以单独存在,或者与其余一个或多个模块联合实现。
Bean的概念:由 IoC 容器管理的那些组成你应用程序的对象;Bean 是 Spring 管理的基本单位,在基于Spring 的 Java EE 应用中,全部的组件都被当成Bean 处理(包括数据源、Hibernate的SessionFactory、事物管理器等)。Bean 就是由 Spring 容器初始化、装配及管理的对象,除此以外,bean 就与应用程序中其余对象没有什么区别了。
1. Spring Core (核心容器):
概念理解:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用 IoC 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
实际应用:Spring 有两个核心接口(BeanFactory 和 ApplicationContext),其中ApplicationContext 是BeanFactory 的子接口。他们均可表明 Spring 容器,Spring 容器是生成 Bean 实例的工厂,而且管理容器中的 Bean。
1 public interface HelloService { 2 public void sayHello(); 3 }
1 public class HelloServiceImpl implements HelloService{ 2 public void sayHello(){ 3 System.out.println("Hello World!"); 4 } 5 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 10 11 <!-- id 表示组件的名字,class表示组件类 --> 12 <bean id="helloService" class="com.ljq.test.HelloServiceImpl" /> 13 14 </beans>
1 public class HelloServiceTest { 2 @Test 3 public void testHelloWorld() { 4 // 一、读取配置文件实例化一个IOC容器 5 ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml"); 6 // 二、从容器中获取Bean,注意此处彻底“面向接口编程,而不是面向实现” 7 HelloService helloService = context.getBean("helloService", HelloService.class); 8 // 三、执行业务逻辑 9 helloService.sayHello(); 10 } 11 }
说明:上诉 1-4 即为一个Spring Bean 的实际应用;其实就是以下4个步骤
ApplicationContext常常用到的三个实现:
2. Spring Context (Spring 上下文):
Spring 上下文是一个配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
在spring使用过程当中,一般的作法是让服务器启动时即实例化全部的bean,这样作在必定程度上提升了web应用的速度。
要配置在服务器启动加载applicationcontext一般有两种方法:
1 <listener> 2 <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> 3 </listener>
1 <servlet> 2 <servlet-name>context</servlet-name> 3 <servlet-class> 4 org.springframework.web.context.ContextLoaderServlet 5 </servlet-class> 6 <load-on-startup>1</load-on-startup> 7 </servlet>
不管经过上面的哪种配置均可以达到服务器启动即实例化bean的目的,若是要想指定applicationContext.xml的位置能够在增长:
1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value>/WEB-INF/appContext.xml</param-value> 4 </context-param>
经过以上配置就能够达到在服务器启动时实例化指定的applicationContext.xml配置文件了。
3. Spring AOP
经过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。因此,能够很容易地使 Spring 框架管理的任何对象支持AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。经过使用 Spring AOP,不用依赖 EJB 组件,就能够将声明性事务管理集成到应用程序中
4. Spring DAO
JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不一样数据库供应商抛出的错误消息。异常层次结构简化了错误处理,而且极大地下降了须要编写的异常代码数量(例如打开和关闭链接)。Spring DAO 的面向 JDBC 的异常听从通用的 DAO 异常层次结构。
说明:针对1-7的详细应用在接下来的章节中结合实例进行讲解