文章目录
一、IoC/DI
1.什么叫IoC
IoC (Inversion of Control,控制反转) ,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。只是因为该理论时间成熟相对较晚,并没有包含在GoF中。
系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离。
从使用上看,以前手动new对象,并设置对象中属性的方式,控制权是掌握在应用程序自身。现在则全部转移到了容器,由容器来统一进行管理对象。因为控制权发生了扭转,所以叫控制反转。
2.什么叫DI
DI 是实现IoC的方法之一。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对
象之中。
所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利
用依赖关系注入的方式,实现对象之间的解耦。
二、Spring容器使用流程
Spring容器的API有 BeanFactory 和 ApplicationContext 两大类,他们都是顶级接口。其中ApplicationContext 是 BeanFactory 的子接口。
三、初始化/注册Bean
1.注册Bean的方式一:类注解
在类上使用注解 @Controller , @Service , @Repository , @Component 。需要保证该类会被Spring扫描到,这种定义方式默认会注册一个名称为类名首字母小写的Bean对象到容器中。
以下定义一个模拟数据库操作的类 org.example.dao.LoginRepository , @Repository 注解会注册名称为 loginRepository 的对象到容器中:
package org.example.dao;
import org.example.model.User;
import org.springframework.stereotype.Repository;
@Repository
public class LoginRepository {
}
定义好了Bean对象,注册到容器中以后,就可以获取Bean对象了,在入口类中,可以通过 ApplicationContext 对象获取Bean,有两种方式获取:
• 通过类型获取:这种获取方式要求该类型的Bean只能有一个
• 通过名称获取:同一个类型的Bean可以有多个
package org.example;
import org.example.dao.LoginRepository;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
//根据Spring配置文件路径创建容器:应用上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
LoginRepository loginRepository1 = (LoginRepository)context.getBean("loginRepository");
LoginRepository loginRepository2 = context.getBean(LoginRepository.class);
System.out.printf("loginRepository: %s%n", loginRepository1 == loginRepository2);
//关闭容器
((ClassPathXmlApplicationContext) context).close();
}
}