Spring之概述
Spring是分层的JAVA SE/EE应用full-stack轻量级的开源框架,以IOC(反转控制)和AOP(面向切面编程)为内核,提供了web层Spring MVC和dao层Spring JDBC以及service层的事务管理等众多的企业级应用开发技术,还可以整合其他开源的第三方框架和类库,逐渐成为了使用最多的JAVA EE企业应用开源框架。
Spring之体系架构图
Spring之IOC
IOC,全称 Inverse Of Control,中文名反转控制,这种思想,其目的在于指导我们设计出更加松耦合的程序。
控制:指的是控制权,简单理解为对象的创建权。
反转:指的是对象的控制权由程序员在类中的主动控制反转到Spring容器来控制。
API的介绍
两个接口
BeanFactory
这是Spring容器的顶级接口,它定义了SpringIOC最基本的功能。由于功能比较简单,一般面向Spring自身使用。
ApplicationContext
这是在BeanFactory基础上衍生出来的接口,它扩展了BeanFactory的功能,一般面向程序员使用,ApplicationContext是在容器启动时,一次性创建并加载了所有的Bean。
他们创建的对象都是单例。
三个实现类
ClassPathXmlApplicationContext
读取类路径下的xml作为配置文件
FileSystemXmlApplicationContext
读取本地目录下的xml作为配置文件
AnnotationConfigApplicationContext
读取一个JAVA类作为配置
一个方法
1.使用bean的id作为条件获取对象
User user = (User) apt.getBean("id");
2.使用bean的class作为条件获取对象
User user = apt.getBean(User.class);
3.使用bean的id和class同时作为条件获取对象
User user = apt.getBean("id",user.class);
bean的作用域
在Spring中, 对于bean支持五种作用域:
singleton(默认) 单例模式, 即对象只创建一次,然后一直存在。
prototype 多例模式, 即每次获取bean的时候,IOC都给我们创建一个新对象。
request 在web项目中,Spring创建一个bean的对象,将对象存到request域中。
session 在web项目中,Spring创建一个bean的对象,将对象存到session域中。
globalSession 用于分布web开发,创建的实例绑定全局session对象。
bean的生命周期
单例: Spring容器初始化时生,Spring容器关闭时死。
多例: 每一次getBean时生,死不归Spring管,由垃圾回收机制管理。
依赖注入(DI)
依赖注入(Dependency Injection, DI) ,其实就是给对象赋值的过程。
依赖注入有两种方式:构造函数和set方法
构造函数注入方式
构造函数的参数有多少,就需要写多少,不适用于参数值不确定的时候。
<bean id="id" class="全限定类名">
<constructor-arg name="属性名" value="值"/>
</bean>
set方法注入方式(常用)
这种方式可以只添加需要的参数
<bean id="id" class="全限定类名">
<property name="属性名" value="值"/>
</bean>
集合注入的方式
单列集合:list,array,set等等。
< list > < array > < set >标签可以互换使用。
<bean>
<list>
<value>值</value>
</list>
</bean>
双列集合:map,properties等等。
< map > < props >标签可以互换使用。
<bean>
<map>
<entry key="键" value="值"></entry>
</map>
</bean>
<bean>
<props>
<prop key="键">值</prop>
</props>
</bean>
关于配置文件模块化
由于Spring的使用,代码少配置多的情况下,将所有的bean配置到同一个配置文件中,会使得这个文件巨大无比,且维护不方便。
所有,Spring给出了两种解决方案:
1> 同时引入多个配置文件
ApplicationContext apt = new ClassPathXmlApplicationContext("bean1.xml","bean2.xml".....);
2>主从配置
在主配置文件中,使用< import resource=“配置文件”/>添加配置文件
注意:
同一个xml文件中不允许出现相同id的bean
多个xml文件中出现相同id的bean,不会报错,但是后加载的会覆盖前加载的bean,所以企业开发尽量保证id唯一。