提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、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相关推荐

  1. spring学习笔记 -- day02 spring基础、IOC控制反转

    一:srping的介绍 1.spring的体系结构 2.spring资源 a.spring-framework-4.2.4.RELEASE:Spring Framework的官方发行包 b.sprin ...

  2. Spring学习:IOC控制反转

    一.Spring概述: Spring是一个开源框架,其存在的根本使命就是简化JAVA开发.为了降低JAVA开发的复杂性,Spring采取了以下四种关键策略: 基于POJO的最轻量级和最小侵入性编程: ...

  3. Spring框架中IoC(控制反转)的原理

    一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...

  4. Spring第一天 IOC 控制反转JavaBean规范 Bean的作用域 生命周期 依赖注入

    Spring:是软件框架,是软件半成品,包含了很多组件. 核心组件:ioc容器 IOC控制反转: 由代码自己控制对象的创建,称为:主动控制(自己new对象,自己炒番茄炒蛋) 有一个组件容器管理对象,应 ...

  5. Spring核心(ioc控制反转)

     IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质.即将控制权由应用程序代码转到了外部容器,控制权的转移就是 ...

  6. Spring 框架之Ioc控制反转

    IoC,Inversion of Control的缩写,中文名称为控制反转,意思是将对象的控制权转移至第三方,例如IoC容器,即可由IoC容器来管理对象的生命周期.依赖关系等. 1.先新建一个Spri ...

  7. Spring中的IoC(控制反转)和DI(依赖注入)

    一.Spring IoC的基本概念 控制反转(IoC) 是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) 是IoC的另外一种说法,只是从不同的角度 ...

  8. 原创经典-为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?

    学到Spring老师一定会讲一句话:IOC能够降低耦合性.可是为什么会降低耦合性,许多老师就讲不清了或者干脆不讲,下面我们通过举一些栗子,一步一步地说明为什么IOC能够降低耦合性. 前言 通过本文你将 ...

  9. Spring的ioc控制反转

    spring介绍 Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿.低效.脱离现实的缺点. Spring致力于J2EE应用的各层(表现层.业务层.持久层)的解决方案, ...

最新文章

  1. 作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(一)
  2. Windows server 2003共享文件夹问题
  3. 嵌入式新人发展的总体方向
  4. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
  5. 中本聪主题系列NFT收藏品在OpenSea发售,于26秒内售罄
  6. Microsoft Active Directory(LDAP)连接常见错误代码
  7. NVIDIA DeepStream5.0官方总结(改动版)
  8. wince BindingSource
  9. springboot雪花算法的生成
  10. 4款最好的Android设备HTML编辑器
  11. 心理学推荐书籍——《色眼识人》
  12. Android 蓝牙4.0 BLE 获取链接设备Rssi值
  13. SAP汇率转换函数[BAPI_EXCHANGERATE_GETDETAIL]
  14. Linux中的截图工具
  15. 2020IT从业者如何找到高薪工作
  16. Thinkphp开发无需挂机开源版本支付系统原码带云端ZFB和WX免输入金额跳转支付
  17. 20190918CF训练
  18. Windows NDK安装及开发
  19. Shell ifs 用法
  20. python选择文件读入_Python学习-文件的调用-读取

热门文章

  1. 从给定的大图中切出指定矩形区域的小图
  2. SmartGit软甲提交代码时报: Commit: Not all refs have been pushed.的解决方法
  3. 2021.1.25-2021.1.31
  4. Matlab中布尔值/逻辑值与数值型类型的相互转换
  5. 机器人学--第二讲-齐次变换矩阵
  6. 小程序实现语音识别歌曲的功能,对接讯飞的api,踩坑篇!!
  7. 跟我一起玩转微信支付
  8. discuzx update sitekey.php,Discuz如何清除应用中心密码附加工具
  9. 类似51vv视频聊天室方案建设
  10. QtCreator更换主题皮肤