Spring-体系结构
IOC:控制反转(DI:依赖注入),反转的是:获取对象的方式。
- IOC(控制反转)也可以称之为DI(依赖注入)
- 控制反转:将 创造对象、属性值的方式进行了反转,从 new、setXxx()反转为 从SpringIOC容器中getBean();
- 依赖注入:将属性值注入给了属性,将属性注入给了bean,将bean注入给了IOC容器;
- 总结:ioc/di,无论要什么对象,都可以直接去Springioc容器中获取,而不需要自己操作(new\setXxx());
因此以后的ioc分为两步:- 1.先给SpringIOC中存放对象并复制
- 2.拿取对象
Spring-IOC-XML 属性
- IOC容器赋值:如果是简单类型(8个基本+String),用value;如果是对象类型,用ref=”需要引用的id值”,因此实现对象与对象之间的依赖关系
1 | <!-- bean的id必须唯一,class为具体的实现类 --> |
依赖注入的三种方式
1.set方式的依赖注入:
- 通过setXxx()赋值;
- 默认使用的是setXxx();
- 依赖注入底层是通过反射实现的
- 需要提供相对应的set方法
1
2
3
4
5
6<!-- 将要注入的引用类型的变量通过property属性进行注入,对应的name是要注入的变量名,使用ref属性声明要注入的bean的id -->
<bean id="userService" class="com.yishan.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
<property name="age" value="23"/>
<property name="name" value="张三"/>
</bean>2.构造器注入:通过构造方法赋值
- 需要注意:如果
的顺序与构造方法参数的顺序不一致,则需要通过type或者index或者name指定 - 一般建议使用name指定,见名知意。
1
2
3
4<constructor-arg value="24" index="1"></constructor-arg>
<constructor-arg value="ls" index="0"></constructor-arg>
<constructor-arg value="24" name="age"></constructor-arg>
<constructor-arg value="ls" name="name"></constructor-arg>- 需要注意:如果
3.p命名空间注入:
- 简单类型: p:属性名=“属性值”
- 引用类型(除了String外):p:属性名-ref=“引用的id”
- 注意多个p赋值的时候要留空格。
- 无论是String还是Int/short/long,在赋值时都是value=“值”,因此建议此种情况需要配合name\type进行区分
1
2
3
4
5
6
7<!-- 首先引入P命名空间 -->
xmlns:p="http://www.springframework.org/schema/p"
<bean id="course" class="org.yishan.entity.Course"
p:courseHour="300"
p:courseName="hadoop"
p:teacher-ref="teacher">
对象的两种创建方式
静态工厂创建
1 | <!-- bean 对象的创建方式-静态工厂创建 --> |
- 工厂方法
1 | /** |
- 测试方法
1 | /** |
实例工厂创建
1 | <!-- bean 对象的创建方式-实例工厂创建 --> |
- 工厂方法
1 | /** |
- 测试方法
1 | /** |
spring整合mybatis-标准xml
1 |
|
Spring-AOP-XML 属性
1 |
|
- 通知顺序:当一个切入点配置了多个通知时,通知会存在运行的先后顺序,该顺序以通知的顺序为准
xml实现事务
1 |
|