首页 > 其他分享 >IOC-反转控制/ DI-依赖注入

IOC-反转控制/ DI-依赖注入

时间:2022-08-17 21:57:25浏览次数:55  
标签:生命周期 DI 反转 CoreServlet xxxDao new IOC 注入

7.1 IOC (inversion of control) – 反转控制

1) 之前我们在学JSP的时候,在CoreServlet中,我们创建xxxDao对象是如何创建的?

IXxxDao xxxDao = new XxxDaoImpl( ) ;

这种写法new了一个XxxDaoImpl类,这样使得CoreServlet和Dao耦合了。

而且IXxxDao xxxDao = new XxxDaoImpl( ) ; 这句代码

如果出现在CoreServlet的某个方法内部,那么xxxDao这个对象的生命周期就是方法的级别。

如果出现在CoreServlet的类中,也就是说xxxDao是一个属性,那么这个xxxDao的生命周期就伴随着CoreServletServlet的生命周期这个级别。

 

2) 之后我们在applicationContext.xml中定义了这个empService和empDao,然后通过解析XML和反射机制,产生EmpServiceImpl 和 EmpDaoImpl类的对象,然后存在一个map容器当中(map容器在BeanFactory中)。

 

 

 

因此,我们改变了之前service,dao等实例对象的生命周期,控制权从程序员转移到BeanFactory。所以BeanFactory我们可以称为IOC容器。

 

7.2 DI - Dependency Injection 依赖注入

1)之前,我们在控制层出现的代码:IEmpService empService = new EmpServiceImpl( );那么,控制层和servcie层存在耦合。

 

 

2)之后,我们将代码修改成IEmpService empService = null; 然后,在配置文件中配置。

 

以前是主动new出来的,现在是IOC容器给我们new出来后,通过依赖关系给我们注入的。

当然注入可以通过三种方式来注入:1)属性直接赋值 2)setXxx方法3)构造方法。我们采用的是第一种。

标签:生命周期,DI,反转,CoreServlet,xxxDao,new,IOC,注入
From: https://www.cnblogs.com/lijili/p/16596650.html

相关文章

  • [题解] HDU 5115 Dire Wolf 区间DP
    考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个。令dp(i,j)表示拿完[i,j]所有物品的最小代价。你可能会说,我们拿[i,j......
  • [ABC236H] Distinct Multiples
    一、题目点此看题二、解法考虑容斥第二个限制,如果钦定\(a_i=a_j\)我们就连边\((i,j)\),具体来说我们枚举边集\(E\)的子集\(S\),设\(f(S)\)表示满足\(\forall(u,......
  • 题解 CF1575D【Divisible by Twenty-Five】
    值域非常小,其中只有\(4\times10^6\)个数是\(25\)的倍数,因此可以暴力枚举所有位数正确的\(25\)的倍数,然后检查是否合法。检查方法就是枚举每一位,如果是数字就必须一......
  • CF Round 814 Div2 题解
    A题ChipGame(签到)给定一个\(n\)行\(m\)列的方格矩阵,左下角是\((1,1)\),右上角是\((m,n)\)。(采取了类似笛卡尔坐标系的表示法,不是普通的\(x\)行\(y\)列)Burenka......
  • std::condition_variable 条件变量
    std::condition_variable条件变量 voidwait(std::unique_lock<std::mutex>&lock);#1template<classPredicate>voidwait(std::unique_lock<std::mutex>&lo......
  • 20. Redis---发布订阅
    1.前言RedisPubSub模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 chan......
  • Redis---服务端命令
    1.前言Redis服务器是对客户端提供服务的主体,只要是安装了Redis数据库的计算机都可以通过本地,或者远程的方式对外提供服务。Redis服务器能够以高可用集群的方式对外提......
  • 19. Redis---基数统计
    1.前言Redis经常使用的数据类型有字符串、列表、散列、集合和有序集合,但这些类型并不能满足所有的应用场景,因此,Redis的后续版本不断的扩增其他数据类型来增强Redis适......
  • 【python基础】os.listdir乱序问题
    前言想要获取之前某个目录的有序文件,除了文件名称,其他的比如文件内容、创建时间等都发生了改变,不清楚使用os.listdir是否会改变前后的文件排序。可以使用帮助文档查看os.......
  • Feature-aware Diversified Re-ranking with Disentangled Representations for Relev
    1.总体本文分为两个部分,第一个部分DAE框架,用于学习iterm的embedding,第二个部分是rerank框架考虑user_pref+relevance+diversity。2. DAE框架在快手短......