1.spring依赖注入概述
spring 依赖注入是什么?
spring 依赖注入也叫Spring IOC 容器,是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。
spring IOC 容器
spring IOC 容器主要分为 “Spring BeanFactory 容器” 和 “ Spring ApplicationContext 容器 ”
2. spring Bean
2.1 pojo
了解spring Bean 之前先说一下 POJO(Plain OrdinaryJava Object)。
POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。2.2 spring Bean 定义
被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的.
2.3 Spring 配置元数据
基于 XML 的配置文件。
基于注解的配置。
基于 Java 的配置。- 2.4 示例
- 元数据配置
<?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-3.0.xsd">
<bean id="helloWorld" class="hello.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
- POJO
package hello;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3. spring bean 作用域
作用域 | 描述 |
---|---|
singleton | 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值 |
prototype | 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean() |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境 |
global-session | 一般用于Portlet应用环境,改作用于仅适用于WebApplicationContext环境 |
4.Spring ApplicationContext 容器
5.1 Spring ApplicationContext 概述
Application Context 是 spring 中较高级的容器。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。 另外,它增加了企业所需要的功能,比如,从属性文件中解析文本信息和将事件传递给所指定的监听器。这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
5.2 最常被使用的 ApplicationContext 接口实现
- FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
- ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
- WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
5.3 示例
package hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestHello {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:Beans.xml");
HelloWorld helloworld = (HelloWorld) applicationContext.getBean("helloWorld");
helloworld.setMessage("hello world,my spring first program");
System.out.println(helloworld.getMessage());
}
}
5.spring 容器工作原理
- spring Bean 和Spring IOC 容器结合后如图。
6. 总结
- spring 定义了 Bean 通过元数据我们可以装配自己的bean.
- Bean 有很多特性,如:生命周期,作用域,继承等,可以根据自己的需求对bean做出修改。
- IOC 容器,主要用来实例化Bean 以及解决Bean 之间的依赖问题,让程序实现松耦合。
- spring 为容器加载配置文件提供了相应的工具类。 如:ClassPathXmlApplicationContext。
- spring 容器的内部原理以及bean 实例化和初始化的更多详细信息需要进一步深入。
完!