gpt4 book ai didi

浅谈Spring中IOC的理解和认知

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈Spring中IOC的理解和认知由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

ioc的推导

1.1、模拟一个正常查询信息的业务流程:

①mapper层:因为没有连接数据库,这里我们写一个mapper的实现类来模拟数据的查询 。

?
1
2
3
public interface permapper {
     void getperinfo();
}
?
1
2
3
4
5
6
7
public class studentmapperimpl implements permapper {
 
     @override
     public void getperinfo() {
         system.out.println( "我是一个学生" );
     }
}

②service层:service的作用是查询人的信息 。

?
1
2
3
public interface personservice {
     void getpersoninfo();
}
?
1
2
3
4
5
6
7
8
9
public class personserviceimpl implements personservice {
 
     private permapper studentmapper = new studentmapperimpl();
 
     @override
     public void getpersoninfo() {
         studentmapper.getperinfo();
     }
}

③contorller层 。

?
1
2
3
4
5
6
7
8
9
import service.personservice;
import service.impl.personserviceimpl;
 
public class ioctest {
     public static void main(string[] args) {
         personservice service = new personserviceimpl();
         service.getstudentinfo();
     }
}

④执行结果如下:

浅谈Spring中IOC的理解和认知

1.2、多个种类的查询

①mapper,增加老师实现类 。

?
1
2
3
4
5
6
7
public class teachermapperimpl implements permapper {
 
     @override
     public void getperinfo() {
         system.out.println( "我是一个老师" );
     }
}

②这时候我们同时查询教师和学生的信息该怎么做呢?

?
1
2
3
4
5
6
7
8
9
10
11
public class personserviceimpl implements personservice {
 
     private permapper student = new studentmapperimpl();
     private permapper teacher = new teachermapperimpl();
 
     @override
     public void getpersoninfo() {
         student.getperinfo();
         teacher.getperinfo();
     }
}

③执行结果:

浅谈Spring中IOC的理解和认知

④如果需求再次变更呢?只需要教师的信息怎么做呢? 毋庸置疑:两种做法, 一种是直接更改personserviceimpl的getpersoninfo() 。

?
1
2
3
4
5
    @override
     public void getpersoninfo() {
//        student.getperinfo();
         teacher.getperinfo();
     }

第二种是扩展service层的接口,把老师和学生分别提供接口来查询:

?
1
2
3
4
public interface personservice {
     void getpersoninfo();
     void getpersoninfo1();
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     public class personserviceimpl implements personservice {
 
     private permapper student = new studentmapperimpl();
     private permapper teacher = new teachermapperimpl();
 
     @override
     public void getpersoninfo() {
         teacher.getperinfo();
     }
 
     @override
     public void getpersoninfo1() {
         student.getperinfo();
     }
}

⑤看起来好像没啥问题是吧?那假如有一百种人呢?需要改来改去人都会疯掉的。这种做法肯定不合理的! 。

1.3、优化查询方式

①聪明的孩子可以想到将查询的对象剥离出来:添加 set() 方法,对接口不实现,只进行预留的工作.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class personserviceimpl implements personservice {
 
     private permapper per;
 
     public void setper(permapper per) {
         this .per = per;
     }
 
     @override
     public void getpersoninfo() {
         per.getperinfo();
     }
 
}

②controller层实现方式:

?
1
2
3
4
5
6
7
8
9
10
11
public class ioctest {
     public static void main(string[] args) {
         personserviceimpl service = new personserviceimpl();
         //学生
         service.setper( new studentmapperimpl());
         service.getpersoninfo();
         //老师
         service.setper( new teachermapperimpl());
         service.getpersoninfo();
     }
}

③总结:这种方式就是把主动权交给了调用者 ,程序不用去管怎么创建,怎么实现了 .,它只负责提供一个接口 .

我们不再去管理对象的创建了 , 更多的去关注业务的实现 ,耦合性大大降低 ,这也就是ioc的原型 .

1.4、ioc本质

控制反转是一种通过描述(xml或注解)并通过第三方去生产或获取特定对象的方式。在spring中实现控制反转的是ioc容器,其实现方法是依赖注入(dependency injection,di).

以上就是关于spring之ioc的理解和认知的详细内容,更多关于spring之ioc的理解的资料请关注我其它相关文章! 。

原文链接:https://blog.csdn.net/weixin_43829443/article/details/115481454 。

最后此篇关于浅谈Spring中IOC的理解和认知的文章就讲到这里了,如果你想了解更多关于浅谈Spring中IOC的理解和认知的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com