Spring框架----java开发的"一站式"解决方案
什么是Spring
Spring是一个开源的,用于简化企业级应用开发的应用开发框架.
-
简化开发:
- Spring框架对很对常用的api做了简化,比如Spring JDBC(Spring jdbc是Spring框架中的一个模块)访问数据库,不再需要考虑如何获取链接,关闭连接,处理异常等.
-
提高了软件的维护性
- Spring框架带了一个Sring容器(Spring框架当中的一个模块)创建对象,并且管理对象之间的依赖关系,这样一来,对象之间的耦合性就大大降低,提高了系统的维护性.
-
可以集成其他的框架
- Spring框架提供了继承其他常用框架的功能,比如要使用
任务调度功能----Quartz框架
则集成Quartz和Spring进行集成
- Spring框架提供了继承其他常用框架的功能,比如要使用
Spring容器
什么是Spring容器
- Sring容器(Spring框架当中的一个模块)创建对象,并且管理对象之间的依赖关系
如何启动Spring容器(spring_day01)
-
step1: 导包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency>
-
step2: 添加Spring配置文件applicationContext.xml
配置文件用来告诉容器,如何创建对象,如何建立对象之间的依赖关系等等.
<bean id="" class="" scope="singleton/prototype" init-method="" destroy-method="" lazy-init="false/true" factroy-bean="" factory-method="">
-
step3: 启动容器
/* * 启动Spring容器 * ApplicationContext: * 是一个接口,定义了Spring容器的基本功能 * ClassPathXmlApplicationContext: * 是一个实现了ApplicattionContext接口的类,该类会依据类路径来查找Spring配置文件,来启动容器 */ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
创建对象
1) 方式一:使用无参构造器
step1: 为类添加无参构造器(或者缺省构造器)
step2: 写配置applicationContext.xml文件,使用bean元素进行配置
<!--
使用无参构造器创建对象,其中
id:唯一
class:类的全类名
-->
<bean id="stu1" class="cn.huang.first.Student" />
step3: 启动Spring容器,调用容器提供的getBean方法来获得对象
类 xx = ac.getBean("id",类Class);
2) 方式二:使用静态工厂方法(了解)
<!-- 使用静态工厂方法创建对象
factory-method:
用来指定静态方法名,容器会调用该类的静态方法来创建对象.
以下配置容器会调用:
Calendar cal = Calendar.getInstance()方法,并返回一个对象
-->
<bean id="cal1" class="java.util.Calendar" factory-method="getInstance"/>
3) 方式三:使用实例工厂方法(了解)
<!-- 使用实例工厂方法创建对象:调用实例对象的方法
factory-bean:
一个bean的id.
factory-method:
指定方法名,该方法名是id为指定的bean所指向的类的方法
以下配置,容器会调用id为cal1的bean的getTime方法.
-->
<bean id="time1" factory-bean="cal1" factory-method="getTime"/>
作用域
容器默认情况下,对于某个bean
元素,只会创建一个实例
可以修改bean的作用域,将作用域设置为"prototy"
<!-- 无参构造器创建
scope:用来设置bean的作用域缺省值"singleton",仅创建一个实例 ;
""prototype"创建多个实例,每调用一次getBean方法就会创建一个
singleton:单例
prototype:原型
-->
<bean id="sb1" class="cn.huang.basic.ScopeBean" scope="prototype" />
生命周期
- 容器在创建好响应的对象之后,会调用该对象的初始化方法,在销毁该对象之前,会调用该对象的销毁方法.
-
可以使用
init-method
和destroy-method
属性来指定初始化方法和销毁方法的名称<!-- 生命周期 init-method:用于指定初始化方法名,在实例化的同时初始化 destroy-method:用于指定销毁方法名 注: 容器在删除删除对象之前会先调用该对象的销毁方法 只有作用域为singleton的bean,销毁方法才会执行 --> <bean id="ms" class="cn.huang.basic.MessageService" init-method="init" destroy-method="destroy"/> ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("basic.xml"); /* * 关闭容器的方法 * ApplicationContext没有定义关闭容器的方法,所以直接同ClassPathXmlApplicationContext的close() */ ac.close();//close()方法是来自于父类的方法
延迟加载
- 默认情况下,容器启动之后,会将所有作用域为
singleton
单例的bean实例化 -
将
lazy-init
属性值设置为true
,容器启动之后不再创建<!-- 延迟加载: 缺省值为false --> <bean id="lb1" class="cn.huang.basic.LazyBean" lazy-init="true"/>