一、IOC控制反转
1.什么是IOC
- IOC控制反转,全称Inverse of Control,是一种设计理念
- IOC是设计理念,是现代程序设计遵循的标准,是宏观目标
2.IOC的核心理念
- 核心理念:由原本的业务具体对象对依赖的控制转为Spring容器对依赖的控制
3.IOC的作用
- IOC的作用是降低对象之间的直接耦合
- 加入IOC容器将对象统一管理,让对象关联变为弱耦合,即——解耦
二、DI依赖注入
- DI(Dependency Injection)是具体技术实现,是微观实现
- DI在Java中利用反射技术实现对象注入(Injection)
三、Spring介绍
1.Spring含义:
- Spring可以从广义和狭义两个角度来看,广义上的Spring是指Spring生态体系,狭义上的Spring是指Spring框架(Spring Fremework)
2.狭义上的Spring框架
- Spring框架是企业开发复杂的一站式解决方案
- Spring的框架核心是IOC容器和AOP面向切面编程
- Spring IOC 负责创建和管理系统对象,并在此基础上扩展功能
3.广义上的Spring框架
- 广义上的Spring框架是Spring解决开发一整套解决方案,它不单单指SpringMVC或是SpringBoot
4.Spring IOC容器职责
- 对象的控制权由第三方统一管理(IOC控制反转)
- 利用Java反射技术实现运行时对象创建与关联(DI依赖注入)
- 基于配置提高应用程序的可维护性与可扩展性
5.Spring IOC 使用案例
package com.learn.spring.ioc.entity;
import lombok.Data;
@Data
public class Apple {
private String title;
private String color;
private String origin;
public Apple() {
}
public Apple(String title, String color, String origin) {
this.title = title;
this.color = color;
this.origin = origin;
}
}
package com.learn.spring.ioc.entity;
import lombok.Data;
@Data
public class Child {
private String name;
private Apple apple;
public Child() {
}
public Child(String name, Apple apple) {
this.name = name;
this.apple = apple;
}
public void eat(){
System.out.println(name + "吃到了" + apple.getOrigin() + "种植的" + apple.getTitle());
}
}
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="sweetApple" class="com.learn.spring.ioc.entity.Apple">
<property name="title" value="红富士"></property>
<property name="origin" value="欧洲"></property>
<property name="color" value="红色"></property>
</bean>
<bean id="sourApple" class="com.learn.spring.ioc.entity.Apple">
<property name="title" value="青苹果"></property>
<property name="origin" value="中亚"></property>
<property name="color" value="绿色"></property>
</bean>
<bean id="softApple" class="com.learn.spring.ioc.entity.Apple">
<property name="title" value="金帅"></property>
<property name="origin" value="中国"></property>
<property name="color" value="黄色"></property>
</bean>
</beans>
package com.learn.spring.ioc;
import com.learn.spring.ioc.entity.Apple;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringApplication {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Apple sweetApple = context.getBean("sweetApple", Apple.class);
System.out.println(sweetApple.getTitle());
}
}