千家信息网

Spring框架中控制反转的介绍以及创建对象的方式

发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章主要介绍"Spring框架中控制反转的介绍以及创建对象的方式",在日常操作中,相信很多人在Spring框架中控制反转的介绍以及创建对象的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2024年09月30日Spring框架中控制反转的介绍以及创建对象的方式

这篇文章主要介绍"Spring框架中控制反转的介绍以及创建对象的方式",在日常操作中,相信很多人在Spring框架中控制反转的介绍以及创建对象的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring框架中控制反转的介绍以及创建对象的方式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

spring框架

控制反转(Inversion on Control)在spring框架里面,一般交给Spring容器,这叫控制反转

什么是控制反转呢?

先来说一下控制正转,

class Demo{    Student student = new Student();}

简单地来说就是自己去创建对象,需要什么对象,就创建什么对象,实在当前文件中创建出来的,自己new出来的,这就叫做"控制正转"

那么控制反转是什么:

就是跟控制正转反着来,就是我需要的对象,我不需要自己new创建出来,我只需要到一个地方去取过来用,相当于让别人创建出来我们需要的对象。另外,让其它人来创建对象有两种方式:第一种是直接调用有参构造方法,另一种方法是调用构造方法,然后使用set方法实现。

第一种方式是在spring的配置文件中(applicationContext.xml)中写

applicationContext.xml

                    

Demo.class

public class Demo{    public static void main(String[] args){        ApplicationContext context = new ClassPathXmlApplicationCOntext("applicationContext.xml");        Student student  = (Student) context.getBean("student"); // 根据你在applicationContext.xml的名字找到要创建的    }}

第二种方式是使用spring的配置文件中调用无参构造方法,然后通过使用set方法将元素放进去

applicationContext.xml

            

该种方法是构建一个无参构造方法,然后将里面对应的元素拿出来,使用set方法放进去,至于对应的class文件也等用于是上面的Demo.class

对于第二种方法的优化:

具体表现在三层架构方面

StudentController.class

// 前面这个注释等同于@Controller,在其他层次对应的就是@service @Repository注释是放在实现类上面的 // 相当于 ApplicationContext.xml 文件中的//              //                     //      @Controller(name="studentController") public class StudentController{    // @Resource(name="studnetService") 就相当于调用setStudentService()方法将下面对应的元素放进Controller对象里    //     // 然后 ref 在调用    //     @Resource(name="studentService")    private StudentService studentService;        public void selectAll(){        studentService.selectAll();    }    public void setStudnetService(StudentService studnetService){        this.studnetService = studentService;    }    }

在次优化变成

StudentController.class

@Controllerpublic class StudnetController{    @Autowired // 这个会自动进行依赖注入,也不用特意写一个set方法了很方便,但是要注意配置文件,要进行配置,扫描注释     private StudentService studentService;        public void selectAll(){        studentService.selectAll();    }   }

applicationContext.xml

    

问题来了,Autowried是根据类型进行注入的,但是如果某个接口存在多个实现的子类,那么Autowried是注入哪一个?又或者说会报错?

答案:Error create bean with 'studnetController',原因并不是因为StudentController里面,而是因为StudentController里面使用了Autowired进行注入,而存在多个实现的几口expected single matching bean but found 2: banjiServiceImpl,banjiServiceImpl2,那么解决方案是:

@Controllerpublic class StudnetController{    @Autowired    // 添加下面的注解,写明白是用那个注入    @Qualifier(value="studentServiceImpl2")     private StudentService studentService;        public void selectAll(){        studentService.selectAll();    }   }

到此,关于"Spring框架中控制反转的介绍以及创建对象的方式"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0