框架:软件的半成品 重复使用
Spring:是一个开源的,轻量级的,用来简化应用开发的框架
Spring:对常用的API做了封装和简化
Spring:提供了一个容器,帮我们创建对象以及建立对象之间的依赖关系(管理对象)
好处:降低对象之间的耦合度,方便代码的维护
Spring:集成其他的框架
Spring将其他的一些框架集成进来(任务调度框架(Quartz)),核心理念(不做重复的轮子)
所以spring又叫一站式的框架
Spring容器(***)
Spring框架中的核心模块,用于管理对象
启动:
(1)导包(spring-webmvc)
(2)添加配置文件appalicationContext.xml
(3)启动spring:
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
创建对象:
Java反射机制
(1***):利用无参构造器
Step1:给类添加无参构造器(缺省构造器也行)
Step2:使用(配置)Bean元素
<!--
使用无参构造器创建对象
ID属性:bean的名称,要求唯一(反射机制,需要Java的字节码文件)
class属性:类的全限定名
-->
<bean id="stu1" class="first.Student">
</bean>
Step3:调用容器的getBean方法来获得对象
(2)利用静态工厂方法(了解)
<!--
使用静态工厂方法创建对象
factory-method属性:指定一个静态方法
spring容器会调用这个静态方法来创建对象
-->
<bean id="cal1" class="java.util.Calendar" factory-method="getInstance">
</bean>
通过调用类的静态方法创建对象
(3)利用实例工厂方法(了解)
<!--
使用实例工厂方法创建对象
factory-bean属性:指定一个bean的ID
factory-method属性:指定一个实例方法
spring容器会调用这个bean的对应的方法来创建对象
-->
<bean id="time1" factory-bean="cal1" factory-method="getTime">
</bean>
通过调用对象的实例方法来创建对象
作用域:
默认情况下,容器对于某个bean,只会创建一个实例
<!-- scope属性:用来配置作用域
缺省值时singleton(单例:一个bean只创建一个实例)
如果值为原型(prototype),一个bean会创建多个实例
-->
<bean id="s1" class="scope.ScopeBean" scope="prototype">
</bean>
生命周期:
初始化:分配资源
销毁:释放资源
Spring中:
初始化方法:init-method属性来指定初始化方法名
Spring容器在创建对象之后,会立即调用初始化方法
销毁方法:destroy-method属性来指定销毁方法
Spring容器在关闭之前,会先销毁对象,在销毁对象之前,会先调用对象的销毁方法,只有作用域 为单例的时候,销毁方法才会执行
<!--
init-method属性:用来指代初始化方法
destroy-method属性:指代销毁方法
-->
<bean id="mb1" class="scope.MessageBean" init-method="init" destroy-method="destory"></bean>
启动spring记得传入.xml配置文件
//启动spring容器
//ApplicationContext:接口
//ClassPathXmlApplicationContext:实现了上面接口(ApplicationContext)的具体类
//AbstractApplicationContext:ApplicationContext的子接口
延迟加载(了解):
spring容器启动后,会将所有作用域为单例的bean创建好
lazy-init属性:指定是否延迟加载,如果值为true,表示延迟加载
lazy-init="true":此时,spring容器对于作用域为单例的bean,就不会再创建相应的实例了
IOC(***):Inversion Of Controll 控制反转
对象之间的依赖关系由容器来建立
DI:Dpendency Injection 依赖注入
容器通过调用提供的set方法或构造器建立的依赖关系
IOC是目标,DI是手段
Set方式注入:
Set注入方式
Step1:提供相应的set方法
Step2:配置<property>元素
Name属性:必须是bean属性