1.Sping概述
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EEDevelopment and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Sping的核心是Ioc(控制反转)和Aop(面向切面),简单来说,Sping是一个JAVA-EE/SE的full-stack(一站式)开源框架。
1.1轻量级:与EJB对比,依赖的资源少,销毁的资源少。
1.2分层:一站式,每一层都提供了解决方案
web层:struts,springMVC
service层:spring
dao层:hiberbate,mybatis,jdbc-Template->spring-data
1.3sping核心
IOC(控制反转),AOP(面向切面)
1.4spring优点
(1)方便解耦,简化开发(高内聚,低耦合)
spring是一个大工厂,可以将所有的对象创建和依赖关系维护交给spring管理,
spring工厂用于生产bean
(2)对AOP编程的支持
spring 提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。
(3)声明式事务的支持
只要通过配置就可以对完成对事务的管理,无需手动编程
(4)方便的程序测试
sping 对Junit4支持,可以方便的=通过注解直接测试Spring程序
(5)方便集成各种优秀的框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
(6)降低了JavaEE API的使用难度
spring对javaEE开发中一些非常难用的API(JDBC,JAVA MAIL y远程调用)等都提供了封装,降低了使用难度.
1.5Spirng体系结构
spring框架是一个分层框架,它包含一系列功能要素,大约分为20几个模块,这些模块分为Core Container,Data Access/Integration,Web ,AOP ,Instrumentation和测试部分。
1.6Spring 中配置bean的三种方式
(1)默认构造的方式
<bean id="" class=""> 必须提供默认构造
(2)静态工厂方式
<bean id="" class="工厂全限定类名" factory-method="静态方法">
工厂代码
publicclass MyBeanFactory {
/**
* 创建实例
* @return
*/
publicstatic UserService createService(){
return new UserServiceImpl();
}
}
Spring配置
<bean id="userServiceId" class="com.itheima.c_inject.b_static_factory.MyBeanFactory"factory-method="createService"></bean>
(3)实例工厂方式
必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的
publicclass MyBeanFactory {
/**
* 创建实例
* @return
*/
public UserService createService(){
return new UserServiceImpl();
}
}
Spring配置
<!--创建工厂实例 -->
<bean id="myBeanFactoryId"class="com.itheima.c_inject.c_factory.MyBeanFactory"></bean>
<!-- 获得userservice
* factory-bean 确定工厂实例
* factory-method 确定普通方法
-->
<bean id="userServiceId"factory-bean="myBeanFactoryId" factory-method="createService"></bean>
1.7 IOC容器对bean的生命周期
(1)通过构造器或工厂方法创建Bean实例
(2)为Bean的属性设置值和对其他Bean的引用
(3)将Bean的实例传给后处理bean的postProcessBeforeInitialization方法
(4)调用Bean的初始化方法 init-method="myInit"
(5)将Bean的实例传递给后处理bean的postProcessAfterInitalization方法(此时可以创建代理对象,做事务)
(6)bean可以使用了
(7)当容器关闭时,调用bean的destroy-method="myDestory"方法
1.8作用域:用于确定spring创建bean的实例个数
备注:
singleton 单例,默认值。
prototype 多例,每执行一次getBean将获得一个实例。例如:struts整合spring,配置action多例