一 spring 的工作原理
我们都知道 spring 有两大核心 : IOC 和 AOP
1. 什么是 IOC ?
ioc : 简称 控制反转 依赖注入
何为 IOC 在以往 我们用对象的时候,总是自己 通过 new 一个对象 ,然而这种做法 对内存的损耗十分大,有了ioc 后 我们就可以动态的注入 不需要采用new 的方式 去创建对象。 而是采用 java的反射机制去创建。将 创建对象 交给 spring 容器去做。
2. 什么是aop ?
AOP : 简称 面向切面工程 。
何为aop ? 呵呵 ,其实我也说不清,只知道它是采用代理的方式 去实现的 ,在项目中 通常像 日志 、事物管理 、缓存啊 基本上是采用的aop 实现的。 aop 的代理的方式 有静态代理和 动态代理
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。它是不需要写代理类 ,而是通过 虚拟机来完成吧 。
3. 反射
什么是类的反射?
通俗来说 就是我们可以通过类说明 ---》可以得到类的父类、实现的接口、内部类、构造函数、方法、属性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。如何得到一个类说明:
Class cls=类.class;
Class cls=对象.getClass();
Class.forName("类路径");
如何得到一个方法并唤起它?
Class cls=类.class;
Constructor cons=cls.getConstructor(new Class[]{String.class});
Object obj=cons.newInstance(new Object[]{"aaa"});
Method method=cls.getMethod("方法名",new Class[]{String.class,Integer.class});
method.invoke(obj,new Object[]{"aa",new Integer(1)});
二。 spring 的三种注入方式
1. 采用接口的方式
2. set get (常用)
3. 通过构造函数
三 spring 的核心 类 和 核心配置文件
FactoryBean:工厂bean主要实现ioc/di
ApplicationContext ac=new FileXmlApplicationContext("applicationContext.xml");
Object obj=ac.getBean("id值");
核心配置文件: applicationContext.xml (上下文)
四 。spring 的 模块
spring 应该是有 七大模块吧。具体我也不清楚。现在我们来说说这些模块是什么,具体是干什么的?
1. spring aop
Spring的 AOP 封装包提供了符合AOP Alliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。
2. spring dao
DAO (Data Access Object)提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。【dao层接口 以及实体类】
3. spring orm
ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。【mybatis的实体映射文件mapper.xml 文件】
4.spring core:
Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。【提供bean】
5.Spring Context:
构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。
6.Spring Web:
Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IOC容器初始化和针对Web的ApplicationContext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
7.Spring Web MVC:
Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和Web Form之间。并且,还可以借助Spring框架的其他特性。