1.SpringIOC与依赖注入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.SpringIOC与依赖注入相关的知识,希望对你有一定的参考价值。
- Spring概述
Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。
通过Spring提供的IoC容器(本质就是一个map,key是字符串,值是对象),可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
AOP编程的支持
通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
- IOC的概念
划分模块的一个准则就是高内聚低耦合。
程序间的依赖关系。
独立性很差,可重用度不高。
2.1工厂式解耦
以上这种方式创建对象会产生耦合,在开发过程中,减少使用这种开发模式。
第一步:先把创建的xml反射替代出来new对象,用反射去创建,然后把发射对象剥离到一个配置文件中。
第二步:然后去用BeanFactory去控制这个文件配置。
到了第二步,这种方式就是工厂式解耦。
由原来的主动索要资源,到现在的被动的给资源。工厂生产什么,它就接收什么,在这个过程中有可能会产生不能匹配的文件。
当然在创建的工厂IOC容器中有两个读取配置的两个对象:一个是Properties,另一个是ResourceBundle。
ResourceBundle.getBudle(); a.这个对象只能取值不能赋值;
b.只能读取properties配置文件(是因为没有添加扩展名的机会),所以别的不行。
C. 它只能读取类路径下的properties文件,别的地方不行。
但是它还有一个细节就是如下全限定类名和绝对路径的区别:
工厂式解耦原理:
2.2控制反转-Inversion of Control
它的主要目的就是解耦。
在service中不可能有可变的方法??
想创建一个对象,只有把工厂对象放外边,放里边会产生多个对象。以下就是spring中ioc的原理:
- 使用spring的ioc
注意:准备spring的jar包(5以上就行)
导入约束xmlns
左图就是用到spring IOC的话,需要配置的三个文件。
- spring的分析
以下是获取的容器中对象的方法:
BeanFactory和ApplicationContext的区别:
Spring 中bean对象的细节--以下是关于bean.xml中的分析:
- 创建bean对象的三种方式:
- Bean对象作用范围改变
- Bean对象得生命周期
- 配置对象:把对象的创建交给spring来管理:依赖注入
什么是依赖注入?就是把当前所需要的对象传进来就是依赖注入。
如下代码所示:
复杂类型注入
补充:
@Service是一个注解啊,告诉spring创建一个实现类的实例啊。。。
就是不用再spring里配置bean,就是因为这个@Service
@Repository用于标注数据访问组件,即DAO组件;
在一个稍大的项目中,如果组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。
以上是关于1.SpringIOC与依赖注入的主要内容,如果未能解决你的问题,请参考以下文章