spring的ioc

这篇博客介绍了Spring框架的核心技术——IOC(控制反转)和AOP(面向切面编程),以及如何通过DI(依赖注入)实现IOC。详细阐述了Spring容器的使用,包括创建bean配置文件、主程序获取对象、对象信息查看以及对象属性的注入。此外,还讨论了Spring创建非自定义类对象和单例模式的应用。
摘要由CSDN通过智能技术生成

spring的核心技术:ioc,aop,能实现模块之间、类之间的解耦合。
依赖:class a 中使用了class b的属性或者方法,则称class a依赖class b。
1.ioc(Inversion of control):控制反转
在这里插入图片描述
在这里插入图片描述
使用ioc的目的是减少对代码的改动,实现不同的功能,即解耦合。
2.ioc的技术实现时DI(Dependency Injection,依赖注入)
在这里插入图片描述
spring是使用了di实现了ioc的功能,spring底层创建对象,使用的是反射。
3.实现步骤
在这里插入图片描述
(1)新建项目(之前的blog里写的创建maven项目的方法)
项目结构:
在这里插入图片描述
pom.xml文件如下:
在这里插入图片描述
pom.xml文件中properties标记的maven-compile都改为1.8(使得编译时生成的target文件夹中含有.xml文件),添加spring-context插件。
新建一个接口SomeServive:
在这里插入图片描述
新建接口实现类SomeServiceImpl:
在这里插入图片描述
resources目录下建立beans.xml文件:
在这里插入图片描述
这个文件是spring的核心,注意beans标记里的bean标记,每一个bean标记相当于new的一个对象(即用bean标记来替代代码中的new语句):
在这里插入图片描述
主程序代码:
在这里插入图片描述
ClassPathXmlApplicationContext类从类路径(编译生成的target文件夹下的classes文件夹寻找与参数指定的.xml文件,返回一个ApplicationContext对象,如果beans.xml不是在classes目录下则要修改路径字段:
在这里插入图片描述

ApplicationContext对象就是spring容器,通过容器的getBean()方法获取对象(注意别忘了强制类型转换),参数是.xml文件中bean标记的id值
运行程序,getBean()方法从容器中获取已创建的对象:
在这里插入图片描述
注意:ApplicationContext对象就是spring容器,当生成一个ApplicationContext对象时就已经通过类的构造函数生成了.xml文件中所有的对象。
例如,在SomeServiceImpl类中加一个构造函数:
在这里插入图片描述
去掉main程序中的getBean方法,发现类的构造函数依然执行了:
在这里插入图片描述

注意:当我们用获取同一个bean的对象赋给两个新建的不同的对象时 ,会发现它们指向同一个对象:
在这里插入图片描述
(2)获取spring容器中java对象的信息:
在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
上图的输出结果是beans中所有bean的id值。
(3)spring还可以创建一个非自定义类对象
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述
(4)spring给对象基本属性赋值
在这里插入图片描述
格式:
在这里插入图片描述
步骤:
在实现类中添加字段及其get,set方法并重载toString():
在这里插入图片描述
修改beans.xml:
在这里插入图片描述
在这里插入图片描述
注意:property标记给对象属性赋值是调用set()方法,如果类中未写则程序会报错。
(5)spring给对象引用类型属性赋值
格式:
在这里插入图片描述
在这里插入图片描述
本质上是一个bean创建对象时给属性赋值时调用set()方法时使用另一个bean创建的对象。
(6)构造注入
在这里插入图片描述
在实体类中添加含参数的构造方法:
在这里插入图片描述
在这里插入图片描述
或者:
在这里插入图片描述
补充spring中存放对象的情况:放入到spring容器中的对象有dao类、service类、controller类、工具类放到spring容器中,这些对象默认是单例的,在容器中这个名称的对象只有一个。不放入到spring容器中的对象有实体类对象(实体类数据来自数据库)、servelet,listener,filter(这三种对象交给tomcat创建,不放入到容器中)等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值