概述
- 轻量级开源JavaEE框架,解决企业开发复杂性
- 两个核心部分
- IOC:控制反转,把创建对象过程交给Spring进行管理
- AOP:面向切面,不修改源代码进行功能增强
- 特点:方便解耦,简化开发、Aop编程支持、方便程序测试、方便和其他框架整合、降低Api使用难度、方便进行事物操作
IOC
基础概念、底层原理
- 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
- 目的是可以降低耦合度
- 底层原理用到xml解析、工厂设计模式、反射
- 实现过程就是在工厂模式代码中 先对xml配置文件解析,获得class属性值,再通过反射创建对象,返回出去
-
接口
Spring提供IOC容器实现两种方式
BeanFactory:IOC容器基本实现,Spring内部使用接口,不提供开发人员进行使用
- ApplicationContext:是BeanFactory接口的子接口,提供更多功能,由开发人员使用
- 两个接口的区别是:
- 两个接口都可以实现加载配置文件,创建对象,BeanFactory加载配置文件时不会创造对象,在获取对象时创建(用时创建);ApplicationContext加载配置文件时,就会将加载的配置文件中的对象创建。
- ApplicationContext接口的逻辑是将耗时耗资源的过程放在服务器启动时执行
ApplicationContext子接口的主要实现类
bean标签的属性 | 属性名 | 作用 | | —- | —- | | id | 唯一标识 | | class | 类全路径(包类路径) |
-
Spring属性注入
注入方式分类
<bean id="book" class="com.bomb.spring5.Book"><property name="bname" value="骆驼祥子"></property><property name="bauthor" value="鲁迅"></property></bean>
<bean id="orders" class="com.bomb.spring5.Orders"><constructor-arg name="oname" value="电脑"></constructor-arg><constructor-arg name="address" value="China"></constructor-arg></bean>
<!--可以简化基于xml配置方式--><!--添加p名称空间在配置文件中--><!--底层依然是set方法注入逻辑--><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="book" class="com.bomb.spring5.Book" p:bname="丰乳肥臀" p:author="莫言"></bean></beans>
注入其他类型属性
<property name="adress"><null/></property>
<property name="adress"><value><![CDATA[<<包含特殊符号内容>>]]></value></property>
注入bean
<bean id="userService" class="com.bomb.spring5.UserService"><!--注入userDao对象name属性:类里面属性名称ref属性:创建userDao对象bean标签id值--><property name="userDao" ref="userDaoImpl"></property></bean><bean id="userDaoImpl" class="com.bomb.spring5.UserDaoImpl"></bean>
<bean id="emp" class="com.bomb.spring5.bean.Emp"><!--设置两个普通属性--><property name="ename" value="lucy"></property><property name="gender" value="女"></property><!--设置对象类型属性--><bean id="dept" class="com.bomb.spring5.bean.Dept"><property name="dname" value="软件室"></property></bean></bean>
<!--写法一,类外部bean方式--><bean id="emp" class="com.bomb.spring5.bean.Emp"><!--设置两个普通属性--><property name="ename" value="lucy"></property><property name="gender" value="女"></property><!--级联赋值--><property name="dept" ref="dept"></property></bean><bean id="dept" class="com.bomb.spring5.bean.Dept"><property name="dname" value="软件室"></property></bean><!--写法二,需要在Emp类中设置get方法--><bean id="emp" class="com.bomb.spring5.bean.Emp"><!--设置两个普通属性--><property name="ename" value="lucy"></property><property name="gender" value="女"></property><!--级联赋值--><property name="dept" ref="dept"></property><property name="dept.dname" value="技术部"></property></bean><bean id="dept" class="com.bomb.spring5.bean.Dept"><property name="dname" value="软件室"></property></bean>
注入集合属性
操作Bean管理(基于注解)
