理解反向控制(IOC)

依赖注入(di):比IOC更好地名字。获得依赖对象的方式反转了。

IOC应用

IOC或者di,还可以达到解耦的目的。

spring开发提倡接口编程,配合di技术,可以更好地达到程序间的解耦,解决层与层之间的解耦。

现在我们体验一下spring的di配合接口编程,完成一个字母大小写转换的案例:

思路:

1.创建一个接口 changeLetter

2.两个类实现这个接口

3.把对象配置到spring容器中

4.使用

通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层层(web层)和业务层的耦合度。

思考题:

接口

ValidateUser

有一个方法

check(??)

有两个类

CheckUser1 implement ValidateUser

{

check//安装xml验证

}

CheckUser2 implement ValidateUser{

check()//到数据库去验证

}

通过set方法注入依赖

bean工厂最简单的容器,提供了基础的依赖注入支持创建各种类型的Bean.

应用上下文(ApplicationContext)

配置bean,beans.xml/applicationcontext.xml

<bean>

</bean>

bean工厂,

从applicationContext应用上下文容器中获取bean和从bean工厂容器中获取bean,

ApplicationContext ac = new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");

bean的属性

singleton,只要这个容器没有死亡,就只有这个bean

request,声明周期在一次http请求中

session声明周期:一个会话。

global session 在一个全局的http Session中,一个bean定义对应一个实例。只要spring还没有关闭,则一直有效。

***从ApplicationContext应用上下文容器中获取bean和从bean工厂容器中获取bean.

//从ApplicationContext中去bean
//ApplicationContext ac = new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");
//当我们去实例化beans.xml的时候,该文件中配置的bean被实例化(该bean 是singleton) //BeanFactory factory = new XmlBeanFactory() //从bean中取出student
//如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么容器
//的bean不能被实例化,只有当你去使用getBean某个bean时,才会实时地创建
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/beans.xml"));
factory.getBean("student");

结论:

1.如果使用ApplicationContext,则配置的bean如果是singleton,不管你用不用,都被实例化(好处是可以预先加载,缺点就是耗内存)

2.如果是使用BeanFactory,则当你实例化该对象的时候,配置的bean不会被马上实例化,当你使用的时候,才会被实例(好处是节约内存,缺点就是速度有点慢)。

3.规定:一般没有特殊要求,应当使用ApplicationContext完成(90%)。

singleton:单例 默认值

prototype:原型

request:一次请求有效

session:session内有效。

bean的scope的细节

入门案例:

beans.xml

<bean id="student" scope="prototype" class="com.hsp.ioc.Student">
<property name="name" value="小猪"/>
<bean id="student" scope="singleton" class="com.hsp.ioc.Student">
<property name="name" value="小猪"/>

测试代码

Student stu1 = (Student)ac.getBean("student");
Student stu2 = (Student)ac.getBean("student"); System.out.println(stu1);
System.out.println(stu2);

request

session

global session

在web开发中才有意义。

三种经常用到的实现:

三种获取ApplicationContext对象引用的方法

1.ClassPathXmlApplicationContext->通过类路径来加载(桌面开发使用得比较多)

2.FileSystemXmlApplicationContext->通过文件路径来获取

举例:

ApplicationContext ac = new FileSystemXmlApplicationContext("D:/javaEE/workspace/myspring1/src/com/hsp/ioc/beans.xml");
        

3.XmlWebApplicationContext 从web系统中加载。当tomcat启动时就会加载。

应用上下文会在启动后预载入所有单例bean,事先创建。

spring学习(2)的更多相关文章

  1. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  2. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  5. Spring学习 Ioc篇(一 )

    一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...

  6. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  7. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  8. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  9. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  10. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. AccessibilityService 官网介绍

    AccessibilityService extends Service java.lang.Object    ↳ android.content.Context      ↳ android.co ...

  2. php判断页面是否是微信打开的示例(微信打开网页)

    代码如下: $user_agent = $_SERVER['HTTP_USER_AGENT'];if (strpos($user_agent, 'MicroMessenger') === false) ...

  3. dede后台title怎么修改的?去掉XXXX-织梦内容管理系统V5.7

    dede后台title怎么修改的? 去掉XXXX-织梦内容管理系统V5.7 打开include/common.inc.php的文件. $cfg_version = 'V57_UTF8_SP1';(这是 ...

  4. dede 文章列表页如何倒序排列

    {dede:arclist row='6' typeid='18' orderway='asc'} <li>;<a href="[field:arcurl/]"& ...

  5. “-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数

    [JAVA学习]“-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数 转载 2016年06月13日 19:33:38 2792 年轻代 年老代概念 htt ...

  6. Android ijkplayer 强大的视频播放器框架教程 -- 导入demo运行(一)

    首先介绍下这个开源项目,这个开源项目是BiliBli 开源的,首先感谢他们的团队. 这是开源的地址: https://github.com/Bilibili/ijkplayer 首先我为什么要选这个, ...

  7. python学习 04 函数参数

    1.参数可以传递元组,但是要加* 2.参数可以传递字典,但是要加**

  8. CentOS 6.4 yum安装LAMP环境

    一.制作连外网的yum源文件 1.  centOS安装完成时是默认存在的,不需要做任何操作,可以直接使用yum 命令进行操作, 默认是在 /etc/yum.repos.d/目录下的 2. 如果你因为制 ...

  9. 微信小程序之云开发一

    最近听说微信小程序发布了云开发,可以不需要购买服务器,就能开发小程序和发布小程序,对于动辄千元的服务器,极大的节约了开发成本,受不住诱惑,我就开始了小程序的云开发,目前项目已上线,亲测不收费,闲不住的 ...

  10. json格式转数组注意事项

    今天遇到一个特别奇葩的问题,json格式明明是正确的,转数组时却就是出不来,后来才发现是文件的编码问题,文件的编码一定要是utf-8无BOM格式,这点一定要切记!切记! 如果想确认json是否正确:h ...