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的方法有两种

  • 静态工厂方法
  • 实例工厂方法