概述
- 轻量级开源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管理(基于注解)