SpringIOC
Spring的两大核心机制
控制反转(IOC)/依赖注入(DI)
面向切面编程(AOP)
如何使用IOC
- 创建maven工程,pom.xml加入依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> </dependencies>
- 创建实体类User
import lombok.Data; @Data public class User { private String name; private int id; private int age; }
- 传统的开发模式,手动new一个user对象
User user =new User(); user.setAge(18); user.setId(9); user.setName("黄波"); System.out.println(user);
利用IOC,在配置文件中添加需要管理的对象,格式xml,名字可以自定义
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="user" class="org.csu.entity.User"> <property name="age" value="19"></property> <property name="id" value="8"></property> <property name="name" value="黄波"></property> </bean>```
从IOC中获取对象
//加载配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml"); User user = (User)applicationContext.getBean("user"); System.out.println(user);
配置文件
通过配置bean标签来完成对象的管理
id: 对象名
class:对象的模版类。(所有交给IOC容器来管理的类必须由无参构造,因为spring底层是通过反射来创建对象的,调用的是无参构造)
对象的成员变量通过property标签完成赋值
- name:成员变量名
- value: 成员变量值(基本数据类型,String可以直接赋值。如果是其他引用类型,不能通过value赋值)
- ref: 将IOC另一个bean赋值给当前的成员变量(DI)
<bean id="user" class="org.csu.entity.User"> <property name="age" value="19"></property> <property name="id" value="8"></property> <property name="name" value="黄波"></property> <property name="address" ref="address"></property> </bean> <bean id="address" class="org.csu.entity.Address"> <property name="id" value="78"></property> <property name="name" value="中南大学"></property> </bean>
IOC底层原理
- 读取配置文件,解析XML文件
- 通过反射机制实例化配置文件中所配置的所有bean
Spring的工厂方法
IOC通过工厂模式创建bean的方法有两种
- 静态工厂方法
- 实例工厂方法