Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
简单可以分成6大模块:
控制反转,把对象的创建和对象之间的调用过程交给spring进行管理;
使用 Ioc 的目的:解耦(降低耦合度);
底层原理使用:xml解析、工厂模式、反射;
1、ioc思想基于ioc容器完成、ioc容器底层就是对象工厂;
2、spring提供了ioc容器的两种方式:(两个接口);
(1)、BeanFactory:ioc容器的基本实现,是spring内部的使用接口,不推荐开发人员进行使用;
在加载配置文件的时候不会创建对象、在获取(使用)对象的时候才会进行创建;
(2)、ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用;
在加载配置文件的时候会直接创建对象;
(3)、Application接口的实现类;
普通bean:在配置文件中定义的类型就是返回的类型;
工厂bean:在配置文件中定义的类型可以和返回的类型不一样;返回的是一个 BeanFactory;
import org.springframework.beans.factory.FactoryBean; public class MyFactoryBean implements FactoryBean { //定义返回的Bean @Override public Object getObject() throws Exception { return new Stu(); } //定义返回的Bean的类型 @Override public Class<?> getObjectType() { return null; } //当前的Bean是否为单例 @Override public boolean isSingleton() { return false; } }
<!--定义的bean、返回是一个 FactoryBean--> <bean id="beanFactory" class="com.ithailin.interview.up.spring5.MyFactoryBean"> </bean>
1、通过构造器创建 bean 的实例(无参构造器);
2、为 bean 的属性设置值,和对其它 bean 的引用(调用 setter 方法);
调用后置处理器;postProcessBeforeInitialization
3、调用 bean 的初始化方法(需要进行配置初始化方法);
调用后置处理器;postProcessAfterInitialization
4、bean 可以进行使用了(对象获取到了);
5、当容器关闭的时候,调用 bean 的销毁方法(需要进行配置销毁的方法);
在spring中,可以在<bean>的scope属性设置bean的作用域,以决定这个bean是单实例的还是多实例的;
默认情况下,spring只为每个ioc容器声明的bean创建唯一一个实例,整个ioc容器范围内都能共享这个实例,所有后续的getBean()和bean的引用都将返回这个唯一的bean实例,该作用域被称为singleton,他是所有bean的默认作用域;
原文:https://www.cnblogs.com/jhdhl/p/14920160.html