spring(day01)
1、IOC容器(IOC思想)
IOC:也就是反转控制
传统获取资源的方式:
例如做饭:买菜、洗菜、择菜、切菜、炒菜,必须对整个做饭的过程熟悉,获取资源是主动从容器中获取所需要的资源
反转控制方式:
点外卖,只需要吃,不需要关心具体饭是怎么做的
反转控制思想变成了容器主动将资源推送给组件,不需要关系容器中如何创建对象,只需要被动接受资源即可
2、DI思想
DI:依赖注入
DI是IOC思想的体现方式,也就是组件以提前定义好的方式被动接受来自容器中的资源注入,经典三层架构:controller、service、dao层,传统方式是controller中创建service层对象,而DI则是通过controller中直接注入service对象或者说是controller中创建service的成员变量,通过set方法或者有参构造器直接将对象赋值给成员变量。
3、IOC容器在Spring中的实现
IOC容器中管理的组件也叫bean,创建bean之前需要创建IOC容器。
(1)BeanFactory
IOC容器的基本实现,Spring内部使用,不提供开发使用
(2)ApplicationContext
BeanFactory子接口,用的多
(3)ApplicationContext的一些实现类
类型名 | 简介 |
---|---|
ClassPathXmlApplicationContext | 通过读取类路径下的xml文件创建IOC容器 |
FileSystemXmlApplicationContext | 通过文件系统路径读取XML文件创建IOC容器 |
ConfigurableApplicationContext | ApplicationContext的子接口,包含扩展方法refresh()和close(),让ApplicationContext有启动、关闭、刷新上下文能力 |
WebApplicationContext | 专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中 |
4、spring入门案例
1、首先在com.xinkai.spring.pojo包下创建一个实体类
package com.xinkai.spring.pojo;
public class HelloWorld {
public void sayHello(){
System.out.println("hello spring");
}
}
2、在resources中创建配置文件applicationContext.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.xsd">
<!--
id是唯一标识不能重复,class是类的路径,对应类型
bean:配置一个bean对象,将对象交给IOC容器
-->
<bean id="helloworld" class="com.xinkai.spring.pojo.HelloWorld"></bean>
</beans>
解释:
bean代表ioc容器中一个组件,id是唯一标识不能重复,class是对应实体类的全路径
3、创建一个测试类
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldTest {
@Test
public void test(){
// 类路径:ClassPathXmlApplicationContext, resource和java目录被加载到类路径中
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloworld = (HelloWorld) ioc.getBean("helloworld");
helloworld.sayHello();
}
}
解释:首先根据xml配置文件获取到ioc容器,然后通过ioc.getBean("helloworld")根据id获取到该对象,直接调用对象的方法sayHello输出内容:hello spring