一、说明
Spring核心是轻量级容器,它实现了IoC(Inversion of Control 控制反转)容器、非入侵性(No intrusive)的框架。并提供AOP(Aspect-Oriented Programming 面向层面的编程)概念的实现方式,提供持久化(Persistence)、事务(Transcation)的支持,提供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装,是一个全方位的应用程序框架(Application framework)。另外,它也提供了对现有框架(Struts、JSF、Hibernate等)的整合方案。
Spring轻量级容器体现在:只需设置一个jar文件到CLASSPATH,不用去调用它,但又可以拥有极其强大的功能,组件极大程度的复用。
Spring将编译时异常转化为运行时异常(编译时异常必写try…catch)。同时,Spring容器管理事务贯穿对象的声明周期:(1)对象生命周期的管理。(2)容器本身具备功能,加在自己的类中。需要自己调用则显式调用,尽量用容器隐式调用,spring即为隐式调用、声明式编程。
Spring的目的在于分离体系结构层次,使得每一层都可以修改但不会影响到其他层。其层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能的松散。
二、关键概念说明
1.依赖注入(DI)
通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它(比如用配置文件给bean中属性传值)。它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注入依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)。
2.控制反转(IoC)
组件之间的依赖关系由容器在运行时决定。控制权由对象本身转向容器,由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。
例如,B对象所依赖的A对象是由Spring创建好并且通过Set方法传递注入过来的。其优点在于若A为接口,让B依赖与接口,只看接口不管实现类,可以把工厂类全部替换掉,对象均由容器创建,最后还可以把容器的功能注入其中。
IoC要求:容器尽量不要入侵到应用程序中,应用程序本身可以依赖于抽象接口,容器根据这些接口所需要的资源注入到程序中,也就是说应用程序不会主动请求资源,容器会自动把资源给应用程序。(除了接口,其他都互相无关,耦合很低)
IoC有基于Set方式的注入(property)和基于构造方法注入。
IoC的核心:Bean工厂。在Spring中,Bean工厂创建的各个实例称为Bean,业务组件间的依赖是容器(Bean工厂)解决的。Beanfactory负责读取Bean定义文件,管理对象的加载、生成、维护Bean对象与Bean对象的依赖关系,负责Bean对象的生命周期。
Spring中有两个包可以来实现IoC:
beans: org.springframework.beans
context:org.springframework.context
3.面向方面编程(AOP)
AOP(Aspect-Oriented Programming 面向层面的编程),基于IoC,是对OOP(面向对象编程)的有益补充。
AOP将应用系统分为两部分:核心业务逻辑(Core bussiness concerns)和横向的通用逻辑,其中核心业务逻辑表现的方面有,所有大型应用中涉及到的持久化管理(Persistent)、事务管理(Transcation Managerment)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。
AOP实际上是由目标类的代理实现的。AOP代理其实是由AOP框架动态生成的一个对象,该对象可以作为目标对象使用。AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异,AOP方法在特定切入点添加了增强处理,并调回了目标对象的方法。
三、总结
Spring是一个轻型容器(light-weight container),其核心是Bean工厂(BeanFactory),用以构造人们所需的模型(Model)。在此基础上,Spring提供了面向层面编程的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展是ApplicationContext更加方便人们实现Java EE的应用;DAO(数据库访问对象)/ORM(对象关系映射)的实现方便人们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架(Struts、JSF、Hibernate)行集成。
注:
小心心得:
1.数据库含有外键要先更新非外键表(该属性在该表一般为主属性),再更新存在外键的表。
2.spring 事务就是保证数据库的正常操作,操作正确更新,操作错误不更新,回滚。
3.spring注入的一种是依靠配置文件.xml以及相应的get和set方法,调用或传递值
4.spring aop可以针对某个方法或事物在其前后或返回结果时添加相应的动作。使功能更丰富。如有不正确还请见谅。
- 另外,我做了一些关于Spring、Struts、Hibernate的小应用可以帮助理解这些框架,如需代码请访问我的Github:https://github.com/Zxnaruto