spring学习(2)
理解反向控制(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)的更多相关文章
- spring 学习之 bean 的注入方式 property和constructor-arg的使用方式
spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...
- Spring学习之AOP总结帖
AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...
- Spring学习之第一个AOP程序
IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- Spring学习 Ioc篇(一 )
一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...
- Spring学习(三)——Spring中的依赖注入的方式
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
- Spring学习(二)——Spring中的AOP的初步理解[转]
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- Spring学习8-Spring事务管理
http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...
- Spring学习之Ioc控制反转(1)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
随机推荐
- php给图片添加文字水印方法汇总
在php中要给图片加水印我们需要给php安装GD库了,这里我们不介绍GD库安装,只介绍怎么利用php给图片添加文字水印的4种方法的汇总.有需要的小伙伴可以参考下. 1: 面向过程的编写方法 1 2 3 ...
- hadoop partitioner个数与reducer个数的试验
job.setPartitionerClass(myPartitioner.class);//设置了5个 job.setNumReduceTasks(2); 1.当分区数等于rducer数量时,正常运 ...
- vim-colors-config
在vim中,主题是以插件形式存在.其中系统自带的主题,存放在$VIMRUNTIME/colors文件夹下,以*.vim命名.(注:查看$VIMRUNTIME请在vim中执行 :echo $VIMRUN ...
- 浅析js绑定同一个事件依次触发问题系列(一)
算了 还是上代码吧 记得写过这篇文章,但是找不到了(对,就是找不到了,算了再写一遍吧) 也是在群中有人问这个绑定不同事件 或者同一个事件的依次触发问题 个人建议如果是一个事件的话那么最好写成函数, ...
- Maven插件wro4j-maven-plugin压缩、合并js、css详解
1. 在pom.xml文件中,引入wro4j-maven-plugin插件 <plugin> <groupId>ro.isdc.wro4j</groupId> ...
- Springboot整合日志时候出现的问题
上图是问题,按照路径去找下,发现其实是jar包重复导致的! 在对应的项目上,右键--->属性(Properties)--->JavaBuild Path 然后选择Libraries 页签 ...
- 使用weka训练一个分类器
1 训练集数据 1.1 csv格式 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setos ...
- [Tjoi2018]数学计算
[Tjoi2018]数学计算 BZOJ luogu 线段树分治 是不是想问为什么不暴力做? 模数没说是质数,所以不一定有逆元. 然后就是要每次build一下把线段树权值init成1, 博猪不知道为什么 ...
- 自定义弹窗 VS AlertDialog分享弹窗
一.摘要 弹窗通常用于提示用户进行某种操作,比如:点击分享按钮,弹窗分享对话框:双击返回按钮,弹窗退出对话框:下载文件,提示下载对话框等等,分享对话框/退出对话框/下载对话框,都可以直接使用Alert ...
- Js编写的菜单树
只需要提供这种JSON格式就ok了 其他的都可以直接引用这个代码进去 var testMenu=[ { "name": "一级菜单", "submen ...