一.spring概述
spring简介:
spring是一个分层的一站式的开源框架,是为了解决企业开发的复杂性而开发的,主要优势其的分层结构由七个不同的层次组成。
spring的架构图。
1.核心容器:核心容器提供了spring框架的基本功能,主要组件为BeanFactory,是工厂模式的一个实现,利用控制反转模式将应用程序的配置和依赖性规范与实际的应用层次代码分离。
2.spring context:spring上下文是一个配置文件,像spring框架提供上下文信息,包含了一系列企业服务,如邮件,国际化等。
3.spring aop:spring aop模块直接将面向切面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
4.spring dao:Spring DAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
5.spring orm::Spring 框架插入了若干个ORM框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatisSQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
6.Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring框架支持与 Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。7
7.Spring MVC框架::MVC框架是一个全功能的构建 Web应用程序的 MVC 实现。通过策略接口,MVC框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI
使用spring的优点:
1.spring是一个容器,可以将所有的对象的创建和依赖关系,交给spring管理,方便各层次的解耦
2.spring提供AOP编程,可以方便实现对权限控制,运行监测等功能
3.通过简单的配置就可以完成对事务的支持
4.不排斥其他优秀框架,内部实现了对其他框架的支持,如struts,hibernate,mybatis等
5.对java EE中非常难用的API(如jdbc,javamail等)都进行了封装,方便使用
二.spring的基础配置
步骤一,下载spring的开发包
官网:http://projects.spring.io/spring-framework/,最新版为5.0
步骤二,创建web项目,导入如下jar包,其中一个为日志包
步骤三,在src下编写相关的配置文件applicationContext.xml
spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
<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">
</beans>
步骤四,编写测试类
public interface UserDao {
public void sayHello();
}
public class UserDaoImpl implements UserDao {
@Override
public void sayHello() {
System. out.println("Hello Spring...");
}
}
步骤五,完成测试类的配置,在配置文件beans节点下引入UserDao的bean对象
<bean id="userDao" class="cn.itcast.spring.demo1.UserDaoImpl"></bean>
步骤六,编写测试程序,可看出对象由spring负责创建
@Test
// Spring 的方式:
public void demo(){
// 解析主配置文件,创建 Spring 的工厂类:
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
// 通过工厂解析 XML 获取 Bean 的实例.
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.sayHello();
}
1.主配置文件详解
bean元素:使用该元素描述spring容器管理的对象
class属性:被管理对象的完整类名
name属性:被管理对象的名字,获得对象时根据此名称获得对象,可以重复,可用特殊字符
id属性:与name属性一模一样,但是不能重复,也不能使用特殊字符
scope属性:
singleton:(默认值),单例对象,表明此对象在spring中只存在一个实例
prototype:多例,表明该对象在每次获得时都会创建一个新的对象,注意在struts中,为了与struts内部一致,actionbean必须配置为多例。
request:在web环境下,对象的声明周期与request一致
session:在web环境下,对象的生命周期与session一致。
生命周期的属性
init-method:配置一个方法作为生命周期初始化方法,spring会在创建对象立刻调用
destory-method:bean销毁时执行此方法,但要求是单例对象,并在工厂关闭时才会执行
2.spring中的工厂详解
spring工厂创建对象的两大思想:DI,IOC
IOC:反转控制的意思,意味将创建对象的方式反转了,不再由我们创建对象,而是反转给spring创建
DI:依赖注入,依赖IDO存在,意思是在spring创建对象时,把类的依赖属性设置进去。
spring的两大工厂类:BeanFactory接口和ApplicationContext接口
BeanFactory:是spring比较原始的接口,特点是每次获取对象时才会创建对象
ApplicationContext 在每次容器启动时都会创建容器配置的所有对象,包含两个实现类,
ClassPathXmlApplicationContext : 加载类路径下 Spring 的配置文件.
FileSystemXmlApplicationContext : 加载本地磁盘下 Spring 的配置文件.
3.spring创建对象的三种方式
方式一,无参数构造方法(常用),配置如下
<bean id="bean1" class="xxx.xxx.xxx.Bean1"></bean>
方式二,静态工厂实例化
提供一个工厂类
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
并主配置如下
<bean id="bean2" class="xxx.xxx.xxx.Bean2Factory"
factory-method="getBean2"/>
方式
三,实例工厂实例化
提供bean3的实例工厂
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
配置文件如下
<bean id="bean3Factory" class="cn.itcast.spring.demo3.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
四.spring的属性注入方式详解
1.spring的bean属性注入方式
<! -- 第一种:构造方法的方式 要求:spring的对象提供有参构造器-->
<bean id="car" class="cn.itcast.spring.demo4.Car">
<constructor-arg name="name" value="保时捷"/>
<constructor-arg name="price" value="1000000"/>
</bean>
2.对象类型的属性注入(常用)<! -- 第二种: set 方法的方式 ,要求;属性提供set方法--> <bean id="car2" class="cn.itcast.spring.demo4.Car2"> <property name="name" value="奇瑞QQ"/> <property name="price" value="40000"/> </bean>
<! -- 注入对象类型的属性 --> <bean id="person" class="cn.itcast.spring.demo4.Person"> <property name="name" value="会希"/><!--set方式注入一个属性--> <! -- ref 属性:引用另一个 bean 的 id 或 name --> <property name="car2" ref="car2"/><!--表明person的创建依赖于car2对象,car2对象为person的属性--> </bean>
五.总结spring作为一个企业级的开源框架,被广泛地使用,并且目前spring家族的产品发展迅速,所以学号spring框架非常必要。
下一遍博客讲继续spring的重点,spring的AOP面向切面编程。