1.Spring是一个分层的JavaSE/EE轻量级开源框架
1.1 为什么要用Spring
方便解耦,简化开发
- Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理AOP编程的支持
- Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能声明式事务的支持
- 只需要通过配置就可以完成事务的管理,而无需手动编程方便程序的测试
三层架构中的Spring位置,更像是一种容器,管理项目中所有对象
1.2 简单使用
//创建容器对象
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
//向容器要对象
User u = (User) ac.getBean("user");
//打印对象
System.out.println(u);
2.1 IOC Inverse of Control 反转控制
将我们创建对象的方式反转了。以前对象的创建时由开发人员自己维护,包括依赖关系也是自己注入。使用了Spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序
2.2 DI:Dependency Injection依赖注入
实现IOC思想需要DI做支持。
注入方式:
- set方法注入
- 构造方法注入
- 字段注入
注入类型
- 值类型注入
- 引用类型注入
applicationContext&BeanFactory
BeanFactory:spring原始接口,针对原始接口的实现类功能单一
容器特点是:
每次在获得对象时才会创建对象ApplicationContext 每次容器启动时就会创建容器中配置的所有对象
- 从类路径加载配置文件:ClassPathXmlApplicationContext
- 硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext
Bean元素:使用该元素描述需要spring容器管理的对象
- name属性:给被管理的对象起个名字,获得对象时根据名称获得对象
- class属性:被管理对象的完整类名.
3 Spring三种创建对象方式
- 空参构造
- 静态工厂
- 实例工厂
scop属性
- singleton 默认值:单例对象,被标识为单例对象在spring容器中只会存在一个实例
- prototype 多例。被标识的对象每次都会创建新的对象
- request
- session
spring分模块配置
- 在一个主配置文件中导入其他spring配置文件
<import resource =" " />
spring属性注入
- set方式
- 构造函数注入
- P名称空间注入
- spel注入
- 复杂类型注入
set:值类型用value 引用类型用ref
<!--将User对象交个Spring容器管理-->
<!--Bean元素:-->
<!--set方式注入-->
<bean name="user" class="main.User">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<!--为car属性注入下方配置的car对象-->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="main.Car">
<property name="name" value="GTA5"></property>
<property name="color" value="red"></property>
</bean>
构造函数注入
其中index 是表示参数所在的索引
type 构造函数的参数类型.
<!--构造函数-->
<bean name="user" class="main.User">
<constructor-arg name="name" value="tem" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>
复杂类型注入
arry 单个值注入或者对象
<property name="arr" value="tom"> </property>
arry 多个值或者对象注入
<property name="arr">
<array>
<value>tom</value>
<value>peter</value>
<value>cat</value>
<ref bean="user"/>
</array>
list单个值注入或者对象
<property name="list" value="jack"> </property>
list多个值或者对象注入
<property name="list">
<array>
<value>tom</value>
<value>peter</value>
<value>cat</value>
<ref bean="user"/>
</array>
map对象注入
<!--map类型注入-->
<property name="map">
<map>
<entry key="rul" value="dfsjlkdsf"></entry>
<entry key="driver" value="56456"></entry>
<entry key-ref="user" value-ref="car"></entry>
</map>
</property>
propreties对象注入
<property name="prop">
<props>
<prop key="driverClass">com.jdbc.mys</prop>
<prop key="afds">adsfdsaf</prop>
<prop key="3332332">666</prop>
</props>
</property>