Spring概述及IOC(控制反转) Part I
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、Spring概述
- 1.Spring的模块划分图:
- 2、Spring主要由(IOC+AOP)构成:
- ioc的创建方式:
- IOC:属性注入的亿种方式
- 总结
前言
Spring概述及IOC(控制反转) Part I
提示:以下是本篇文章正文内容,下面案例可供参考
一、Spring概述
开源的免费框架,是一个容器,可以管理所有的组件(类);
轻量级的、非入侵的框架,不依赖于Spring的API
控制反转(IOC)和面向切面编程(AOP)
支持事务处理,支持对框架整合
组件化、一站式
1.Spring的模块划分图:
Test:Spring的单元测试模块;
该单元的使用需要使用jar包 spring-test-4.0.0.RELEASE
Core Container:核心容器(IOC);黑色代表这部分的功能由哪些jar包组成;要使用这个部分的完整功能,这些jar都需要导入
spring-beans-4.0.0.RELEASE、
spring-core-4.0.0.RELEASE、
spring-context-4.0.0.RELEASE、
spring-expression-4.0.0.RELEASE
AOP+Aspects(面向切面编程模块)
spring-aop-4.0.0.RELEASE、spring-aop-4.0.0.RELEASE
数据访问:Spring数据库访问模块
spring-jdbc-4.0.0.RELEASE、spring-orm(Object Relation Mapping)-4.0.0.RELEASE、
spring-ox(xml)m-4.0.0.RELEASE、spring-jms-4.0.0.RELEASE、(Intergration)
spring-tx-4.0.0.RELEASE(事务)
2、Spring主要由(IOC+AOP)构成:
IOC(控制反转):
更改以往的主动获取资源为被动获取资源
主动获取资源的方式://比如我们需要一个Person实例,我们就需要自己new一个Person实例
public class Instance{Person person = new Person();
}被动获取资源的方式://资源的获取不是我们自己创建,而是交给一个容器来创建和设置;public class Instance{Person person;public void method(){person.eat();}}
容器:管理所有的组件(有功能的类);假设我们在做web项目的web层servlet受容器管理,逻辑控制层service也受容器管理;容器可以自动查出那些需要用到另一些组件,容器帮我们自动创建Service对象,并把service对象赋值给servlet。
总结:主动的new 资源变成了被动的接受资源。
什么是DI?
DI(Dep[endecy Injection)也就是依赖注入,容器能知道哪个组件运行的时候,需要另外一个组件,容器通过反射的形式,将容器中准备好的组件对象注入到所需的对象中。
Ioc在使用的时候有几个细节问题:
1.ApplicationContext(IOC容器的接口)
2.组建的创建是由容器完成的,那是什么时候创建好的呢?
容器中对象的创建在容器创建完成的时候就已经创建好了
3.同一个组件在Ioc容器中默认是单实例的
4.容器中如果没有这个组件,那么去获取这个组件的话会报异常。
5.ioc容器在创建这个组件对象的时候,property会利用setter方法为javaBean的属性进行赋值
6.javabean的属性名是由什么决定的?
getter/setter方法是属性名;ser去掉后面那一串字母小写就是属性名
ioc的创建方式:
public class Person {private String lastName;private Integer age;private String email;private String gender;public Person() {}public Person(String lastName, Integer age, String email) {this.lastName = lastName;this.age = age;this.email = email;}public Person(String lastName, String email, String gender) {this.lastName = lastName;this.email = email;this.gender = gender;}public Person(String lastName, Integer age, String email, String gender) {this.lastName = lastName;this.age = age;this.email = email;this.gender = gender;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic java.lang.String toString() {return "Person{" +"lastName=" + lastName +", age=" + age +", email=" + email +", gender=" + gender +'}';}
}//ClassPathXmalApplicationContext()方法适用于从类的路径下来加载配置文件//new FileSystemXmlApplicationContext()方法以绝对路径来加载配置文件@Test
public void testIOc(){ApplicationContext ioc = new ClassPathXmlApplicationContext("Day01/Bean.xml");/*** Person person01 = (Person) ioc.getBean("person");* 如果按照类型找,那么ioc配置文件里面只能放相同类型的只能放一个组件* 可以类型和id组合使用,那么就可以有多个相同类型的组件* Person bean = ioc.getBean(Person.class),这种方式以类来加载组件
*/Person person = ioc.getBean("person", Person.class);System.out.println(person);
}
IOC:属性注入的亿种方式
1.以getter和setter方式
<!--一个bean 叫一个组件-->
<!--这种通过调用Get和Set方法为属性赋值的方式,都调用了Person的无参构造器-->
<!--class注册的组件的全类名,id:这个属性值在配置文件中要保持唯一性name为你要生成的实例对象的属性名,value为要生成对象的属性值注意:此种方式,只能为基本数据类型赋值
-->
<bean id="person" class="Day01.pojo.Person"><property name="lastName" value="zhangsan"></property><property name="age" value="18"></property><property name="email" value="zhangsan@atguigu.com"></property><property name="gender" value="man"></property>
</bean>
2.通过构造器的方式来实例化对象
<!--此种方式指定构造器参数名及值-->
<bean id="person01" class="Day01.pojo.Person"><constructor-arg name="lastName" value="李四"></constructor-arg><constructor-arg name="age" value="12"></constructor-arg><constructor-arg name="gender" value="男"></constructor-arg><constructor-arg name="email" value="lisi@129.com"></constructor-arg>
</bean>
<!--还可以不指定name属性,但是要按照构造器的参数位置-->
<!--如果顺序乱了,可以为每个属性指定索引,表示位于第几个参数-->
<!--写几个constructor_arg 调用含有几个参数的构造器方法-->
<bean id="person02" class="Day01.pojo.Person"><constructor-arg value="王五"></constructor-arg><constructor-arg value="12"></constructor-arg><constructor-arg value="男" index="3"></constructor-arg><constructor-arg value="lisi@129.com"></constructor-arg>
</bean><!--如果类中构成构造器重载-->
<!--比如-->
<!--person(string,integer,string)-->
<!--person(string,string,string)-->
<!--这样就不知道赋值给哪个构造器了 我们可以为其指定类型,告诉Ioc你估值的参数的类型-->
<bean id="person03" class="Day01.pojo.Person"><constructor-arg value="王五"></constructor-arg><constructor-arg value="12" type="java.lang.Integer"></constructor-arg><constructor-arg value="lisi@129.com"></constructor-arg>
</bean>
总结
未完待续.…………
Spring概述及IOC(控制反转) Part I相关推荐
- spring学习笔记 -- day02 spring基础、IOC控制反转
一:srping的介绍 1.spring的体系结构 2.spring资源 a.spring-framework-4.2.4.RELEASE:Spring Framework的官方发行包 b.sprin ...
- Spring学习:IOC控制反转
一.Spring概述: Spring是一个开源框架,其存在的根本使命就是简化JAVA开发.为了降低JAVA开发的复杂性,Spring采取了以下四种关键策略: 基于POJO的最轻量级和最小侵入性编程: ...
- Spring框架中IoC(控制反转)的原理
一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...
- Spring第一天 IOC 控制反转JavaBean规范 Bean的作用域 生命周期 依赖注入
Spring:是软件框架,是软件半成品,包含了很多组件. 核心组件:ioc容器 IOC控制反转: 由代码自己控制对象的创建,称为:主动控制(自己new对象,自己炒番茄炒蛋) 有一个组件容器管理对象,应 ...
- Spring核心(ioc控制反转)
IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质.即将控制权由应用程序代码转到了外部容器,控制权的转移就是 ...
- Spring 框架之Ioc控制反转
IoC,Inversion of Control的缩写,中文名称为控制反转,意思是将对象的控制权转移至第三方,例如IoC容器,即可由IoC容器来管理对象的生命周期.依赖关系等. 1.先新建一个Spri ...
- Spring中的IoC(控制反转)和DI(依赖注入)
一.Spring IoC的基本概念 控制反转(IoC) 是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) 是IoC的另外一种说法,只是从不同的角度 ...
- 原创经典-为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?
学到Spring老师一定会讲一句话:IOC能够降低耦合性.可是为什么会降低耦合性,许多老师就讲不清了或者干脆不讲,下面我们通过举一些栗子,一步一步地说明为什么IOC能够降低耦合性. 前言 通过本文你将 ...
- Spring的ioc控制反转
spring介绍 Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿.低效.脱离现实的缺点. Spring致力于J2EE应用的各层(表现层.业务层.持久层)的解决方案, ...
最新文章
- 作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(一)
- Windows server 2003共享文件夹问题
- 嵌入式新人发展的总体方向
- vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
- 中本聪主题系列NFT收藏品在OpenSea发售,于26秒内售罄
- Microsoft Active Directory(LDAP)连接常见错误代码
- NVIDIA DeepStream5.0官方总结(改动版)
- wince BindingSource
- springboot雪花算法的生成
- 4款最好的Android设备HTML编辑器
- 心理学推荐书籍——《色眼识人》
- Android 蓝牙4.0 BLE 获取链接设备Rssi值
- SAP汇率转换函数[BAPI_EXCHANGERATE_GETDETAIL]
- Linux中的截图工具
- 2020IT从业者如何找到高薪工作
- Thinkphp开发无需挂机开源版本支付系统原码带云端ZFB和WX免输入金额跳转支付
- 20190918CF训练
- Windows NDK安装及开发
- Shell ifs 用法
- python选择文件读入_Python学习-文件的调用-读取
热门文章
- 从给定的大图中切出指定矩形区域的小图
- SmartGit软甲提交代码时报: Commit: Not all refs have been pushed.的解决方法
- 2021.1.25-2021.1.31
- Matlab中布尔值/逻辑值与数值型类型的相互转换
- 机器人学--第二讲-齐次变换矩阵
- 小程序实现语音识别歌曲的功能,对接讯飞的api,踩坑篇!!
- 跟我一起玩转微信支付
- discuzx update sitekey.php,Discuz如何清除应用中心密码附加工具
- 类似51vv视频聊天室方案建设
- QtCreator更换主题皮肤