栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习---Spring依赖注入和控制反转

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习---Spring依赖注入和控制反转

1、控制反转、依赖注入 1.1什么是控制反转

控制反转是面向对象编程中使用的术语,通过该术语,对象或对象集的控制权被赋予框架或由框架提供的容器。

控制反转IoC:
     给予spring实现了一个bean的仓库,将项目中的类的对象纳入到spring中管理,管理其生命周期 这样就解决多次实例化对象问题,减少了内存的消耗

可以理解为;原来主动权在代码(程序员),何时需要,何时获取,被动方就是仓库,容器

                   IoC之后控制权在于仓库,程序(开发者)变成了被动的      

1.2什么是依赖注入

*       依赖:类依赖于属性(HelloController)依赖(HelloService)

 *       注入:(用到了反射的知识),需要使用注解标注  @Autowired

public class HelloController {

//如果从容器中取数据,耦合性非常强

HelloService hs=new HelloService();

}
    

但是一个问题就出现了,HelloController 与HelloService之间的耦合非常紧密,假如我们还没有来的及对HelloController 的HelloService绑定对象,却调用了show方法的话,那么程序将会抛出空指针异常。

    这是我们开发过程中最不希望看到的结果,所以Spring提供了一套叫做控制反转与依赖注入这套机制,目的就是为了解耦。

  在Spring中,你不需要自己创建对象,你只需要告诉Spring,哪些类我需要创建出对象,然后在启动项目的时候Spring就会自动帮你创建出该对象,并且只存在一个类的实例。这个类的实例在Spring中被称为Bean。而这种模式,我们称之为“单例模式”。也就是一个类只有一个实例的意思。

JAVA注解配置:

声明注解的语法:

                声明                                    含义        

       @Component                            当前类是组件,没有明确的意思

       @Service                                    当前类在业务逻辑层使用

       @Repositorty                             当前类在数据访问层使用

       @Controller                               当前类在展现层(MVC)使用   

以上四种声明方式效果完全一致,使用不同的关键词是为了给阅读的人能够快速了解该类属于哪一层

@Controller                 // 标注他是个controller类 

                                   //这是在告诉Spring,在创建项目时要自动帮忙创建这个类的Bean

public class HelloController {

                                  //耦合型非常高 关联性
    @Autowired           //要求Spring帮我们注入一个Bean
    HelloService hs;
    @RequestMapping("hello")
    @ResponseBody
    

        hs.test();
        return "helloWorld";
    }

但是还没完,我们虽然让Spring帮我们创建了对象,但是HelloController 怎么知道这个对象在哪呢?它根本就不知道你有这么一个Bean(对象)啊。

    所以接下来,我们要告诉HelloController 刚才Spring帮我们创建的Bean(对象)到底在哪,也就是“注入”这个Bean。

注入注解的语法:

                声明                                    含义       

        @Autowired                    Spring为这个变量注入一个Bean

        @Inject                            翻译为“注入”最易懂的注入注解

        @Resource                      翻译为“资源”,可以理解为Spring往里面注入的时一个资源

    以上四种声明方式效果完全一致,使用不同的关键词是为了给阅读的人能够快速了解注入的Bean到底是个什么东西。

    使用方法为:在我们需要注入依赖的成员变量前使用该注解。让我们看下面一段代码

    我们可以看到,在声明成员变量Student的前面我们使用了@Autowired,所以Spring会自动帮我们注入一个Bean,我们就再也不用担心忘记绑定对象而出现空指针啦。

    但是这还没完,虽然我们告诉了Spring哪些类是需要添加依赖,哪些类是需要注入Bean,但是Spring还需要我们做一次配置,来真正完成这样一个操作。

1.3松散耦合对象


    @RequestMapping("hello")
    @ResponseBody
    

2、scope 2.1scope属性

spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。

在Spring 2.0之前,有singleton和prototype两种;

在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request,session和global session类型,它们只实用于web程序,通常是和XmlWebApplicationContext共同使用

scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。
————————————————
版权声明:本文为CSDN博主「LitaVadaski」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LitaVadaski/article/details/79487945


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号