Spring框架的作用
- 主要用于与其他技术进行整合
- 将应用程序中的Bean组件实现低耦合关联,可以提高系统扩展和维护性
- 可以利用Spring框架管理系统的各个组件(Action、Service、Dao)
使用Spring框架开发的优点
- 方便解耦,简化开发
- 方便程序测试
Spring框架的模块
- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是
BeanFactory
,它是工厂模式的实现。BeanFactory
使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 - Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
- Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
- Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring框架容器的基本使用
Spring框架的核心是提供了一个容器,该容器可以对Bean组件进行管理,例如创建Bean对象,销毁一个Bean对象等操作。该容器还具有IOC和AOP高级特性,将Bean对象调用解耦。
-
配置Spring容器
-
在工程的src目录下,引入applicationContext.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--此处写各种bean:Java实例对象--> </beans>
-
添加相关jar包
spring-beans、spring-context、spring-core、spring-expression、com.springsource.org.apache.commons.logging。
-
-
Spring容器的实例化
-
bean包下放置实体类,在applicationContext.xml中使用标签配置
<!-- bean:代表一个Java实例对象 id:唯一标识该对象 class:指定实例对象的类型 --> <bean id="user1" class="com.bean.User"> <!--property:代表类中的属性 value:为属性设置值--> <property name="name" value="李华"></property> <property name="age" value="21"></property> <!--运行test1测试效果--> </bean>
public class Test1 { public static void main(String[] args) { // 加载配置文件从类加载路径开始 Java(src) JavaWeb:classes ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取bean组件对象 User u = (User) ac.getBean("user1");//括号内为applicationContext.xml中的bean id。 System.out.println(u); }
-
当引用的值是一个对象时
<bean id="user2" class="com.bean.User2"> <property name="name" value="LeeHua"></property> <property name="age" value="78"></property> <!--引用的值是一个对象“Teacher” 用ref="实例对象的id"--> <property name="teacher" ref="teacher"></property> <!--运行Test2测试效果--> </bean>
-
Bean的三种创建方式
<!--通过静态工厂获取实例对象--> <bean id="userFactory" class="com.factory.UserFactory" factory-method="getUser"></bean> <!--通过Test3进行测试--> <!--配置工厂实例bean 与静态工厂相比较 少了static--> <bean id="userFactory2" class="com.factory.UserFactory2"></bean> <bean id="user3" factory-bean="userFactory2" factory-method="getUser"></bean> <!--通过Test4进行测试--> <!--配置标准工厂类--> <bean id="user4" class="com.factory.UserFactoryStand"></bean> <!--通过Test5进行测试-->
-
-
Spring容器管理Bean组件
-
控制Bean组件对象的创建方式(作用范围)
在元素利用scope属性,Spring可以控制Bean对象创建方式;默认情况下scope属性可以用singleton和prototype两种值。
- singleton:采用单例方式创建(默认)
- prototype:采用非单例(原型)方式创建,每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new …Bean()
- 上述两种情况可以通过判断获取两次对象的地址是否相同来看出效果
-
Bean的name 和 id
在spring同一个上下文中id,name只能有一个,但是同一个id可以用多个别名,比如<bean id=“a” name="a1,a2,a3″ class=“com.shaxiaozi.A”/>,a1,a2,a3指向的是同一个对象[前提是单例的情况下]。如果不是单例则创建了和name数量相等的bean实体。
-
-
Bean的生命周期
-
1
-
指定Bean组件对象创建后初始化和销毁处理方法(该属性仅对scope="singleton"有效)
指定初始化方法:利用元素的init-method属性指定
指定销毁方法:利用元素的destroy-method属性指定.
<bean id="teacher" class="com.bean.Teacher" scope="singleton" init-method="init" destroy-method="destory"><!--指定初始化和销毁方法(方法在实体类中,名字可以自定义)--> <property name="name" value="Hua's T"></property> <property name="id" value="1001"></property> </bean>
-