1.什么是IOC控制反转?
控制反转其实就是把对象的实例化、初始化、销毁这些过程全都交给Spring去实现。由Spring容器去控制对象的生命周期。
2.Spring如何创建实例
(1)用构造器来实例化
Spring 中Bean工厂通过调用该对象的
无参构造函数,如果该类缺少无参构造函数,就会报错。
(2)使用静态工厂方法实例化
(3)使用实例工厂方法实例化
3.结合生活例子来谈谈SpringIOC容器
就好比以前我们要做饭,必须要会烧柴、炒菜、下调味料,现在我们用智能电饭锅,只需要放入材料,按下开关就会自动帮我们做好,我们只需要会拿出来吃就可以了。
一般步骤如下:
传统方法
1、HelloWorld.java
public class HelloWorld{
public void say(){
System.out.println("hello");
}
}
public static void main(String[]args){
HelloWorld hw = new HelloWorld();
hw.say();
}
2、java--->class javac.exe
3、把class文件放入到java虚拟机中
4、得到运行结果
spring容器
1、写一个类 HelloWorld
2、把HelloWorld这个类放入到容器中
以配置文件的形式把类放入到容器中
3、启动spring容器
4、利用spring的API把helloWorld这个对象拿出来
5、helloWorld.say()完成方法的调用
说明:创建helloWorld这个类是由spring容器来完成的
4.Spring容器默认情况下什么时候创建对象?如果该对象中有大量属性特别是集合,过早加载,会增加内存负荷,如果解决?延迟加载的优缺点?
(1)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application.xml");
Spring 容器默认启动的时候,就已经将配置文件中的所有Bean实例化了。
(2)Spring给我们提供了懒加载方式,lazy-init="ture"表示该类启用懒加载方式,这样可以在改对象真正被使用时,才进行实例化:
<bean id="helloWorld" class="cn.com.hsbc.domin.HelloWorld" lazy-init="ture"></bean>
<alias name="helloWorld" alias="傻子"/>
@Test
public void test(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application.xml");
HelloWorld hw = (HelloWorld) applicationContext.getBean("傻子");//启用懒加载后,此时才真正实例化对象
hw.sayHi();
}
(3)
优点:lazy-init="ture"延迟加载对象可以使属性多的类减少内存消耗,用到的时候才加载
缺点 :如果配置文件写错了,会导致启动服务器的时候发现不了错误,直到调用的时候才报错
应该根据实际情况来对某些消耗大的类采取懒加载方式,但不是所有类。lazy-init="false"有利于过早发现错误
5.Spring Bean工厂创建实例默认是单例模式还是多里模式?
默认是单例,scope="singleton"。可以根据需求去自定义配置,scope属性决定bean的范围
<bean id="helloWorld" class="cn.com.hsbc.domin.HelloWorld" lazy-init="false" scope="prototype"></bean>
,scope="singleton"要注意并发问题,导致属性全局共用,例如WEB开发中购物车肯定不能用单例,会导致全部用户共用一个购物车
6.IOC总结
springIOC:
* spring容器中的bean创建
* 三种方案 面试题
* 利用默认的构造函数
* 利用静态工厂方法
* 利用实例工厂方法
* 创建对象的时机
* 默认情况下,在spring启动的时候,创建纳入spring容器中所有的bean
在spring容器启动的时候,可以检查错误
但是如果bean的属性中有数据,会过早的加载到内存中,所以如果bean中有数据
应该把数据的对象的声明放在方法中
* 如果在spring的配置文件中,有lazy-init为true,则context.getBean("beanId")时
才要创建对象
缺点:在spring容器启动的时候,是检验不出错误的
* 对象的作用域
* 在配置文件中,scope为
"singleton"
* 默认值
* spring产生的bean只有一个实例
* 处于单例模式的bean的创建、初始化、销毁都是受spring容器管理的
* 在容器关闭的时候执行销毁工作
"prototype"
* 多例
* spring容器负责该bean的创建、初始化,但是销毁工作程序员做
* 无论该bean的lazy-init为什么值,都在context.getBean时创建对象(因为这个时候Spring容器根本不知道你将要创建多少个对象,所以它干脆等你调用再创建)
* 如果该bean中有资源对象,手动关闭
* init和destroy方法
init在构造器执行完毕之后执行
destroy方法在spring关闭的时候执行
分享到:
相关推荐
JavaEE spring IoC入门案例
依赖注入:Dependency Injection IOC的作用:降低程序间的偶合(依赖关系) 依赖关系的管理:以后都交给spring来维护 ... ref:用于指定其他bean类型数据,它所指的是在spring的IOC容器中出现的bean
spring_ioc快速入门
Spring入门级教程,从零开始教你认识Spring,了解Spring,理解Spring的两大核心IoC和AOP,教你如何使用Spring进行开发
Spring中IoC的入门实例
文章Spring项目IOC入门案例、文章Spring项目DI入门案例的原代码。方便大家沟通学习。
1.Spring入门和IOC介绍 2.对象依赖 3.AOP入门 4.JDBCTemplate和Spring事务 5.Spring事务原理 6.Spring事务的一个线程安全问题 7.IOC再回顾和面试题 8.AOP再回顾
1.spring入门学习 2.spring的ioc容器原理
Spring中IoC的入门实例详解.doc
这是俺写的第一个IoC入门实例 刚刚学的Spring
Spring概述与IOC,对于刚入门的工程师有用
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
内容主要为Spring在Web端的使用,使用xml文件配置,练习Spring的使用
文档附带代码,具体可查看 http://blog.csdn.net/partner4java 中 《partner4java 讲述Spring入门》之第一步:Spring概述与Spring IoC
spring ioc入门
spring入门纲要 Spring aop ioc 技术
一个机遇Spring3的入门小案例,里面主要简单演示了Spirng配置文件如何配置自动扫描包,控制类、服务类、Dao类如何加注解,被IOC扫描装入容器中。还有AOP例子的演示,有before after afterreturn afterthrow,还有...
springioc 入门源码,快速上手,快速理解ioc
NULL 博文链接:https://samter.iteye.com/blog/408519