Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。 spring为企业应用的开发提供了一个轻量级的解决方案。该解决方案包括:基于依赖注入的核心机制、基于AOP的声明式事务管理、与多种持久层技术的整合,以及优秀的web
mvc框架等。
一 spring构架的组成结构图:
Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。
Core和Beans模块:框架的基础部分,提供IoC(反转控制)和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许你从程序逻辑中分离出依赖关系和配置。
Context模块:构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法。Context模块继承了Beans的特性,然后添加了对国际化(例如资源绑定)、事件传播、资源加载和对Context的透明创建的支持。Context模块同时也支持J2EE的一些特性,例如EJB、JMX和基础的远程处理。ApplicationContext接口是Context模块的关键。
Expression Language模块:Expression Language模块提供了一个强大的表达式语言用于在运行时查询和操纵对象。它是JSP2.1规范中定义的unifed expression language的一个扩展。该语言支持设置/获取属性的值、属性的分配、方法的调用、访问数组上下文(accessiong the context of arrays)、容器和索引器、逻辑和算术运算符、命名变量以及从Spring的IoC容器中根据名称检索对象。它也支持list投影、选择和一般的list聚合。
JDBC模块:该模块提供了一个JDBC抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。
ORM模块:该模块为流行的对象-关系映射API——JPA、JDO、Hibernate、iBatis等提供了一个交互层。利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射。如前边提到的简单声明性事物管理。
二使用Spring管理Bean
spring核心容器的理论:spring核心容器就是一个超级大工厂,所有的对象(包括数据源等基础性资源)都会被当成spring核心容器管理的对象----spring把容器中的一切对象统称为Bean。只要是一个java类,spring就可以管理该java类,并将它当成Bean处理。<spring容器怎么知道管理哪些Bean,XML配置文件(也可用注解),spring使用xml配置文件来管理容器中bean,spring对xml配置文件的文件名没有任何要求,可以随意定义。
<bean id="person" class="org.crazyit.app.service.Person"> <property name="axe" ref="axe"/> </bean> <bean id="axe" class="org.crazylit.app.service.Axe"/> <bean id="win" class="javax.swing.JFrame"/> <bean id="date" class="java.util.Date"/></span></span>
配置文件中的<bean>元素默认以反射方式来调用该类无参数的构造器。spring框架通过反射根据<bean>元素的class属性指定的类名创建了一个java对象,并以<bean>元素的id属性的值为key,将该对象放入spring容器中---这个java对象就成了spring容器中bean。在spring配置文件中配置bean时,class属性的值必须是bean实现类的完整类名(必须带包名),不能是接口、抽象类,否则无法使用spring无法使用反射创建该类的实例。
上面配置文件中还包括一个<property>子元素,<property>子元素,<property>子元素通常用于作为<bean>元素的子元素,它驱动spring在底层以反射执行一次setter方法。其中<property>的name属性值决定执行那个setter方法,而value或ref决定执行setter方法的传入参数。spring框架只要看到<property>子元素,就会在底层以反射方式执行一次setter。
1 如果传入参数是基本类型及其包装类、string等类型,则使用value属性指定传入参数。
2 如果以容器中其他bean作为传入参数,则使用ref属性指定传入参数。
<bean id="person" class="org.crazyit.app.service.Person"></span>
Spring框架解析该<bean>元素后将可以得到两个字符串,其中idStr的值为"date",classStr的值为“java.util.Date”。
三 spring的优点
1 低侵入式设计,代码的污染极地。
2 独立于各种应用服务器,基于spring框架的应用。
3 它的IoC容器降低了,业务对象体替换的复杂性,提高了组件之间的解耦。
4 spirng的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提高了更好的复用。
5 spring的ORM到DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
6 spring的高度开放性,并不强制应用完全依赖于spring,开发者可自由选用spring框架的部分或全部。
四总结:
spring就是一个容器,可以管理任何的java类