java界乃由五大传统框架:
1.核心业务层框架(地位不可动摇)Spring,
2.控制层框架:SpringMVC与struts2,
3.持久层框架:MyBatis,Hibernate。
先从spring说起吧,了解过spring的同学都知道,Spring是一个轻量级的IOC和AOP容器。
Spring的两大核心思想就是IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
第一章 IOC
一、那么什么是IOC呢,有反转就会有正转,正转就是你需要用到这个类对象时,自己手动new出来。而反转就是你设计编写好的类不是由你自己创建,而是把创建的权力交予Spring框架的IOC容器。
IOC的核心实现=配置文件+反射+工厂模式
Spring IOC会在在创建对象判断是否有依赖于另一个对象,IOC容器会将该对象依赖的对象的引用注入到创建的这个对象中。依赖注入提倡的是面向接口编程。
二、以我的理解来看,spring思想是将应用程序的主动性改为被动性,以前我们需要用到什么类,应用就自己new什么类,感觉应用程序是老大,但是,正是如此,类于类之间的耦合度就会越来越高,不方便测试。程序中的每一个类变得不可分割。而spring的出现改变了这种状态,它通过IOC于DI思想,将创建的权力交给IOC,注入的问题交给DI,我们根本不需要考虑什么时候new这个类对象,我们只需要在applicationContext.xml中配置bean,通过注入的方式,注入给类中的属性就行了。
三、正是因为他的特性思想,我们可以将它于持久层框架和控制层框架一起整合,把controller类,mapper接口,service类,action类,dao类等等都交给spring管理,前台发送请求,控制层接收请求,根据url在IOC容器中找到相应的controller类和方法,controller类中又依赖注入了service类,controller再调用service类,service类中又依赖注入了dao类,dao类再对数据库进行操作后,将操作结果返回给service类,service类返回给controller类,controller类再返回给浏览器。这样前后台交互就完成了,然而,在这期间我们并没有new 任何的controller类,service类,dao类,通通是spring创建的,我们只是被动的使用它就行了。这大大降低了程序的耦合度。
第二章 AOP
一、AOP其实就是面向切面编程,在动作执行的某个切点来织入相关的逻辑。AOP是通过动态代理机制来实现的。
在JAVA中一般采用JDK动态代理模式,但是我们都知道,JDK动态代理模式只能代理接口而不能代理类。因此,Spring AOP 会这样子来进行切换,因为Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理。
- 如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;
- 如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类——不过这个选择过程对开发者完全透明、开发者也无需关心。