博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring IoC概念
阅读量:5823 次
发布时间:2019-06-18

本文共 2113 字,大约阅读时间需要 7 分钟。

hot3.png

    Spring现在是我们在开发当中必不可少的框架,几乎所有的java项目都用到了spring框架,但是有时候想一想感觉虽然是每天都在和Spring框架接触,但是好像还真的不太了解它背后的原理,所以最近把Spring的一些知识整理一下,写一些博客做一个记录。

    

什么是Spring IoC

    Spring IoC有一个中文解释:控制反转。控制反转的意思就是我们把创建对象的权利交给Spring来完成,我们不需要去创建对象,只需要在要用到的时候调用对象就行,而这些对象都在Spring的IoC容器里面存储着。举一个例子,我们创建了一个Student类,Student类里面有一个study()方法,这时候我们再创建一个Teacher类,如过我们想要在Teacher中调用Student的study()方法的话就需要像下面代码一样在Teacher中new一个Student实例然后调用study()方法,一般的代码中我们是这样做的,但是在一项目当中我们往往需要用到很多不同的类当中的不同方法,这样我们就需要不停的new出需要的对象的实例,而且这些实例在我们使用完之后有时候就没什么用了,这样不仅我们要在代码中不停地去new新的实例,也非常影响代码的性能。Spring IoC很好地为我们解决了这个问题,当我们的代码利用Spring跑起来的时候,Spring会在IoC容器中为我们代码中需要创建实例的类创建好实例放在IoC容器当中(当然我们也可以设置在用到Spring在我们用到某个对象的实例的时候在创建也行),我们需要的时候再去调用就可以,而且Spring中创建这些实例默认是单例模式,只会创建一个,这样就相当于节省了代码的性能消耗。

    这就是Spring IoC,为我们的系统创建并保存实例供我们在需要的时候调用。

public class Student {    public void study() {        System.out.println("学生正在学习。。。");    }}public class Teacher {    public static void main(String[] args) {        Student student = new Student();        student.study();    }}

 

Spring的IoC容器

    刚刚在上面提到了Spring的IoC容器,它是一个放置Spring所产生的对象实例(Spring中称呼这些实例为bean)的地方,我们可以再IoC容器当中获取我们需要的所有项目的实例也就是bean。

    Spring IoC容器的设计主要是基于BeanFactory和ApplicationContext两个接口,其中ApplicationContext是BeanFactory的子接口,BeanFactory是一个顶级接口,我们在实际开发过程中用到最多的往往是ApplicationContext这个子接口,因为ApplicationContext相当于BeanFactory的一个扩展,和BeanFactory比起来,ApplicationContext的方法和功能更加齐全。

 

Spring IoC在代码当中的实现

    再好的理论也要用到实践当中,上面讲的都是一个Spring的理论知识,到底Spring IoC在代码里是如何展示的?这里是一个我个人的理解。(由于现在流行的是以注解的方式开发,所以我们这里就以注解方式为例,XML方法不作讲解)。

    Spring IoC的作用是控制反转,帮助我们来创建对象的实例,但是Spring如何知道到底哪些类需要被创建实例?我们一般在需要被创建实例的类上加上特定的注解告诉Spring这个类需要被创建实例总共四个注解:,@Service和@Repository这三个分别用来注解controller层、service层和dao层。还有一个特殊的注解@Component哪一层都可以注释,使用注解的时候放在类的最上面即可。其实这几个注释在目前来说区别不得太大,它们的功能仅仅是通知Spring将目标类创建一个实例放在IoC容器中即可,当时Spring建议将这些类的每一层注释清楚,不排除以后会做区分的可能,所以在写代码的时候一定要注意规范。

//注解放在类的上方@Servicepublic class MenuServiceImpl implements MenuService {

    当然仅仅是使用注解是不够的,我们需要告诉Spring这些有注解的类文件的地址,于是这里一般是在xml文件中配置扫描器,我们一般在Springmvc的xml配置@Controller的扫描,在Spring配置文件里面配置@Service和@Repository的扫描,如下代码base-package中设置的即为这些注解类所在的包。

 

转载于:https://my.oschina.net/zicheng/blog/1921129

你可能感兴趣的文章
曾鸣:区块链的春天还没有到来| 阿里内部干货
查看>>
如何通过Dataworks禁止MaxCompute 子账号跨Project访问
查看>>
js之无缝滚动
查看>>
Django 多表联合查询
查看>>
logging模块学习:basicConfig配置文件
查看>>
Golang 使用 Beego 与 Mgo 开发的示例程序
查看>>
ntpdate时间同步
查看>>
+++++++子域授权与编译安装(一)
查看>>
asp.net怎样在URL中使用中文、空格、特殊字符
查看>>
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
jquery中的data-icon和data-role
查看>>
python例子
查看>>
环境变量(总结)
查看>>
ios之UILabel
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
渐变色文字
查看>>