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
    /*默认情况下Spring会将返回值当作路径解析为文本  需要注解 将指定的方法直接写入到回应对象中 */

        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松散耦合对象

/* 需要做一个映射 代表访问hello 就访问这个方法*/
    @RequestMapping("hello")
    @ResponseBody
    /*默认情况下Spring会将返回值当作路径解析为文本  需要注解 将指定的方法直接写入到回应对象中 */

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


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值