Spring工作模式
1. spring用工厂方法设计模式将xml文件载入内存
2. 对xml文件进行解析,如bean标签等各种标签。xml中不同的命名空间,spring用策略模式提供了完美的解决方案,是一个策略模式,spring会自动扫描类路径META-INF/spring.handlers配置文件来寻找相关策略实现类。
3. 建造配置的bean,通知相关接口,观察者模式
4. 通过全类名反射实例,setter\interface\ constructor等方法用来注入
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)
Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。Spring解决了一个非常关键的问题他可以让你把对象之间的依赖关系转而用配置文件来管理,也就是他的依赖注入机制。而这个注入关系在一个叫Ioc容器中管理,Ioc容器中就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中而达到对这些对象管理以及一些列额外操作的目的。
Spring第一个核心就是IOC控制权由对象本身转向容器;IOC动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的。由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。Spring Bean的创建时典型的工厂模式,他的顶级接口是BeanFactory
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。
静态代理
针对每个具体类分别编写代理类;针对一个接口编写一个代理类。由程序员创建,再对其编译。在程序运行之前.class文件已经存在了
AOP动态代理:
AOP就是基于动态代理实现的,动态代理在程序运行时,运用反射的机制动态创建而完成。无需程序员手动编写代码,需要从JDK本身说起。在Jdk的java.lang.reflect包下有个Proxy类,它正是构造代理类的入口
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。