1、什么是spring
spring框架是开源的、轻量级的企业级应用开发框架,目的在于减少了侵入;spring框架提供整体的解决方案,开发者可以选择使用spring提供的解决方案,也可以和第三方框架进行整合开发。
2、spring的本质是:管理软件中的对象,对象如何创建,以及维护对象之间的关系。
3、spring的核心:AOP和IOC(Inversion of control)。 即面向切面编程和控制反转。可以降低组件间的耦合度,即解耦,便于系统以后的维护。
IOC:的原理:指程序中的对象的获取方式发生了反转,以前通过new生成对象,现在由第三方框架创建(或注入)对象,第三方框架一般通过注入配置文件的方式来具体指定注入哪一个实现,从而降低了对象之间的耦合度,spring框架使用DI(Dependency Injection)的方式实现了IOC控制,既依赖注入。IOC是一种思想,而DI是实现这种思想的主要途径。
DI由两种注入方式,setter注入和构造器注入
4、spring容器的实例化(有两种方式)
4.1:加载系统文件进行实例化
String confi="c:\application.xml";//系统路径下的资源路径 ApplicationContext ac=new FileSystemXmlApplicationContext(confi);//加载配置文件获得spring上下文对象
4.2:加载类路径下的配置文件进行实例化
String confi="applicationContext.xml";//类路径下的文件 ApplicationContext ac=new ClassPathXmlApplicationContext(confi);
5、spring实例化bean有三种方法
比如有一个javabean对象person,在com.fonghuaxi下
import com.fonghuaxi; public class Person{ private String username; private String password; private int age; public static Person getInstance(){ return new Person(); } //提供getter 和setter方法 ... }
5.1:构造器进行实例化
<bean id="person" class="com.fonghuaxi.Person"></bean>//spring容器会调用Person的默认构造函数进行实例化,生成对象。
5.2:静态工厂进行实例化
<bean id="person1" class="com.fonghuaxi.Person" factory-method="getInstance"></bean>
5.3:实例方法进行实例化
<bean id="person1" class="com.fonghuaxi.Person"></bean> <bea id="person2" factory-bean="person1" factory-method="getInstance"></bean>
6、bean的作用域
bean的作用域 |
|
---|---|
singleton | 在每一个spring IOC容器中,一个bean定义对应一个对象实例,默认项 |
prototype | 一个bean定义对应多个实例 |
request | 在一次http请求中,一个bean定义对应一个实例,仅在web环境下 |
session | 在一个httpsession中,一个bean定义对应一个实例,仅在web环境下 |
globalSession | 感兴趣的可以自己了解,使用和session差不多 |
7、bean的生命周期回调方法
7.1 在bean上指定 init-method="init" 初始化回调
7.2 在bean定义上指定 destroy-method="destory" 销毁bean的时候回调,仅在singleton下起作用
7.3 在顶级beans上指定初始化回调 default-init-method="init"(为所有的bean指定初始化),指定 default- destory-method="destory"(为所有bean指定销毁回调)。
8.bean的延迟实例化方法
在bean上指定lazy-init="true"可以延迟bean的实例化,在顶级beans下指定default-lzay-init="true可以为所有的bean指定延迟初始化
9、spring Ioc的setter注入
例如:person类在com.fongzhongxi下
class Person{ private String username; private String password; setter 和getter方法//提供setter方法是为了容器能够自动注入相应的属性值 ... public Person(String username,password){ this.username=username; this.password=password; } }
setter注入:
<bean id="person1" class="com.fongzhongxi.Person"> <property name="username" value="张三" />//注意name的属性username要和person中指定的属性username一致,否则不能注入 <property name="password" value="123"/> </bean>
构造器注入:
<bean id="person2" class="com.fongzhongxi.Person"> <constructor-arg index="0" ref="person1"/>//注意ref引用setter的id为person1的属性进行注入 </bean>
10、spring ioc的自动装配