谈谈对spring的理解
spring是java里头应用最广的框架,它的成功源于它的理念和思想,包括我们熟知的IOC和AOP思想,同时它也是是一个轻量级的开源框架。
何为轻量级,即它部署简单,所依赖的东西非常少,资源占用少
对于spring的理解目前除了使用它来开发系统之外,了解多一点的就是其核心理念IOC以及重要功能AOP。
IOC的话就是在程序中手动创建对象的控制权交由spring框架管理,若要使用某个对象,只需要从spring容器中获取需要的对象,我们可以不去关心对象的创建过程。在创建对象的过程中,我了解到有一个叫依赖注入的概念,依赖注入DI即spring在创建对象的过程中,将对象的依赖属性,比如简单值,集合对象等,通过配置设置给该创建的对象。
对于AOP,即所说的面向切面编程,在AOP思想里把系统功能分为核心业务功能和周边功能。所谓核心业务功能即登录,增加删除数据等等都叫核心业务,而周边功能则是日志,事务管理这些,被业务模块共同调用的逻辑,因此周边功能在springAOP里面就被定义成切面,AOP就是将核心业务功能和切面功能分别独立开发,然后把切面功能和核心业务“编织”在一起,用来降低模块的耦合度,减少系统的重复代码(可以举例)
spring动态代理
Spring AOP就是基于动态代理实现的。即如果Spring的某个bean配置了切面,那么Spring创建这个bean的时候实际上是创建的是这个bean的一个代理对象,后续对bean方法的调用实际上也是调用代理类重写的代理方法。
Bean代指的就是那些被IOC容器所管理的对象
实现动态代理的方式有两种,一个是基于接口的JDK动态代理,基于反射机制生成代理对象,要求代理对象至少实现一个接口,若没有实现接口的对象,则会使用CGLib生成一个代理子对象。它是基于继承的动态代理,生成的代理子对象继承了目标对象的方法,并且可以对方法进行增强。
注:反射指在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法,并且对于任意一个对象,都能够调用他的任意一个方法,这种动态获取信息以及动态调用对象方法的功能称为反射机制。