IOC(Inversion of control): 控制反转
控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心为bean工厂,在Spring中,bean工厂创建的各个实例称作bean
Spring工作原理
Spring是个很不错的框架。内部最核心的就是IOC了, 动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring常用的三种注入方式
Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。
Set注入
这是最简单的注入方式
bean的定义:
package com.ydoing.demo;
public class Person {
private Computer computer;
public void setComputer(Computer computer) {
this.computer = computer;
}
public void useComputer() {
computer.start();
}
}
bean的配置
<bean id="person" class="com.ydoing.demo.Person">
<property name="computer" ref="computer" />
</bean>
通过构造器注入
bean的定义:
package com.ydoing.demo;
public class CPU {
private String name;
public CPU(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
bean的配置:
<bean id="cpu" class="com.ydoing.demo.CPU">
<constructor-arg value="Intel"/>
</bean>
通过工厂方法
适合私有构造器以及没有set方法的bean。
package com.ydoing.demo;
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
static final Singleton instance = new Singleton();
}
public static final Singleton getInstance() {
return SingletonHolder.instance;
}
}
bean的配置
<bean id="singleton" class="com.ydoing.demo.Singleton" factory-method="getInstance"/>