spring框架

'spring是一个驿站式的框架,意识是使用spring框架既可以开发web层,也可以开发service层,还可以开发dao层
spring的本质:spring就是一个对象的容器,因为在这个容器中有可以处理请求的对象,所以可以用来写web层,因为有service层对象,因为有dao层对象,所以可以用来操作数据库.
注意:spring是一个模块化的框架,spring功能很多很强大,但是并不要求所有功能都用的上,用哪个模块就引入对应模块即可.
spring的优势:
1.方便解耦,简化开发
2.AOP(面向切面编程)编程的支持
3.声明式事务的支持
4.方便程序的测试
5.方便集成各种优秀框架
6.降低javaEE API的使用难度
ioc的概念和作用
注意:ioc和AOP不是从spring才提出的,在spring之前更趋向于理论化,在spring才发扬光大.
ioc的概念:
ioc:inverse of control (反转控制/控制反转) ,我们之前在一个Java类中通过new的方式去引入外部资源,这叫正向;现在框架帮我去创建对象,
什么时候需要对象就去问spring要,这就是反转,我们丧失了一个权力,但是拥有了一个福利(不用考虑对象的创建,销毁)
ioc的作用:ioc解决程序耦合的问题
关于程序耦合;
耦合的意思:耦合度的意思,程序当中,为了实现一个业务功能,不同的模块之间互相调用就会产生耦合
注意:耦合是不可能避免的,只能尽量去降低
“高内聚,低耦合”,内聚度过高不利于代码复用,内聚度往往通过增加方法来完成.
程序的耦合
耦合性:也叫耦合度,是对模块间关联程度的度量.
耦合的分类:
1.内容耦合:当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合叫做内容耦合,内容耦合是高程度的耦合,应该尽量避免.
2.公共耦合:两个或者两个以上的模块共同引用一个全局数据项,这种耦合称为公共耦合.在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的,
3.外部耦合: 一组模块都访问同一个全局简单变量,而且不是通过参数表传递该全局变量的信息,
则称之为外部耦合.
4.控制耦合:一个模块通过接口向另一个模块传递一个控制信号,接收信号的模块根据信号值进行适当的动作,这种耦合称之为控制耦合.
5标记耦合:若一个模块A通过接口向两个模块B和C传递一个公共参数,那么称模块B和C之间存在一个标记耦合.
6.数据耦合:模块之间通过参数来传递数据,那么被称之为数据耦合.
7.非直接耦合:两个模块之间没有直接的关系,他它们之间的联系完全是通过主模块的控制和调用来实现的.
总结:模块之间应该尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合.

ioc的底层原理:利用反射创建对象.即工厂类创建对象.

spring框架ioc的使用:
在配置文件applicationContext.xml中 有< bean > 标签
bean 标签的属性
1.id 值对应当前bean标签的名字
2. class 实例化类的全限定名,供反射实例化使用 对应当前bean 标签指向的具体javaBean类
3.scope:对象的使用范围
(1) singleton:默认值 , 单例,项目全局内存中只有一个对象,一般在使用spring的时候保持默认值就可以
(2) prototype:原型的意思,在这里是多例,每引用或者getBean一次,spring框架就会返回一个新的对象,比如sqlSession这个特殊的对象
(3)request:这种配置针对web应用,每一个request范围内只对应一个对象
(4)session:这种配置只针对web应用,每一次会话该bean只有一个对象.
(5)global session:针对的是portlet环境,等同于servlet下的session

appicationContext 和 Javabean的区别
1.applicationContext :立即加载模式,在Spring启动的时候会立即实例化对象,等待使用.
2.BeanFactory:使用的时候才去实例化对象(延迟加载模式)
Bean标签的生命周期:
1.init-method 指定初始化执行的方法
2.destory-method 指定销毁时执行的方法
注意:销毁执行方法,scope配置为单例.
关闭方法在ApplicationContext接口实现类ClassPathXmlApplicatonContext中定义.
Bean标签的创建对象方式:
创建对象:通过class配置的全限定类名创建对象,框架使用反射技术.
自己创建对象,加入到ioc容器中.

依赖注入(DI)
deprndency inject(依赖注入的意思)
ioc和di的区别:
ioc和di是一个事情,只是描述的角度不同.
di:从代码的角度来说,service对象代码依赖于spring容器给我们创建并且注入所需要的对象
ioc:从容器的角度来说这件事情,容器创建dao层对象并且注入到service层当中

set方法注入,也叫设置注入,这是常用和推荐的方法

< bean> 标签的子标签property配置
name:set方法名,去掉set
ref:创建javaBean对象的id属性值

构造方法注入
bean标签的子标签
< constructor-arg > 属性值 name 构造方法名,ref 创建javaBean对象的id属性值

注意 : 默认构造方法注入 所以我们在使用set方法注入时,对应的javaBean要有空参构造

Spring 的启动
ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值