zoukankan      html  css  js  c++  java
  • spring注解思考

    spring bean是什么

    在 Spring 中,构成应用程序*主干*并由*Spring IoC容器*管理的*对象*称为*bean*。bean是一个由Spring IoC容器实例化、组装和管理的对象。

    1、bean是对象,一个或多个不限定

    2、bean由spring的ioc管理

    3、我们的应用程序由一个个bean构成

    bean规范

    1. 所有属性为private
    2. 提供默认构造方法
    3. 提供getter和setter
    4. 实现serializable接口 https://www.jianshu.com/p/4935a87976e5

    产生bean

    1. @Component
    2. @Repository
    3. @Controller
    4. @Service
    5. @Configration
      前五种只能对类使用。
    6. @Bean (特殊,可对方法注解。@Bean注解需在上方五个注解的类中才生效)

    DIP、IoC、DI以及IoC容器

    https://www.cnblogs.com/liuhaorain/p/3747470.html

    依赖倒置原则(DIP):

    高层模块定义接口,低层模块负责实现

    高层模块(has-A)不应依赖于低层模块,两者应该依赖于抽象。

    ​ --在层之间加入抽象接口类,低层模块依赖于高层的抽象接口

    抽象不应该依赖于细节,细节应该依赖于抽象。

    ​ --业务。低层叫细节,低层模块的实现必须符合高层定义的接口标准

    控制反转(IoC):

    https://www.zhihu.com/question/23277575/answer/169698662

    IoC就是一个对象定义其依赖关系而不创建它们的过程

    其实就是DIP的实现,IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合

    控制反转(IoC),它为相互依赖的组件提供抽象,将依赖(低层模块)对象的获得交给第三方(系统)来控制即依赖对象不在被依赖模块的类中直接通过new来获取

    软件设计

    软件设计原则:原则为我们提供指南,它告诉我们什么是对的,什么是错的。它不会告诉我们如何解决问题。它仅仅给出一些准则,以便我们可以设计好的软件,避免不良的设计。一些常见的原则,比如DRY、OCP、DIP等。

    软件设计模式:模式是在软件开发过程中总结得出的一些可重用的解决方案,它能解决一些实际的问题。一些常见的模式,比如工厂模式、单例模式等等。

    DI(依赖注入)

    说白了:利用反射机制为类的属性赋值的操作

    IoC容器

    https://blog.csdn.net/programmer_at/article/details/82389221

    我们自己手动创建一个车instance的时候,是从底层往上层new的:

    每一个类的构造函数都直接调用了底层代码的构造函数。这个过程中,我们需要了解整个Car/Framework/Bottom/Tire类构造函数是怎么定义的,才能一步一步new/注入。底层的改动都会牵动所有上层的改动。如果每次修改一个类,我们都要修改所有以它作为依赖的类,那软件的维护成本就太高了。

    而IoC Container在进行这个工作的时候是反过来的,它先从最上层开始往下找依赖关系,到达最底层之后再往上一步一步new(有点像深度优先遍历)。所谓依赖注入,就是把底层类作为参数传入上层类,实现上层类对下层类的“控制”。

    这里IoC Container可以直接隐藏具体的创建实例的细节,在我们来看它就像一个工厂:

    我们就像是工厂的客户。我们只需要向工厂请求一个Car实例,然后它就给我们按照Config创建了一个Car实例。我们完全不用管这个Car实例是怎么一步一步被创建出来。


    注解

    Bean和@Bean https://www.cnblogs.com/bossen/p/5824067.html

    注解分为两大类

    一类是使用Bean

    即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;

    一类是注册Bean

    @Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

    @Bean是啥

    @Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且交给Spring容器管理;

    从这我们就明白了为啥@Bean是放在方法的注释上了,因为它很明确地告诉被注释的方法,你给我产生一个Bean,然后交给Spring容器,剩下的你就别管了

    @Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean


    Dao层接口??

    mybatis通过JDK的动态代理方式,在启动加载配置文件时,根据配置mapper的xml去生成Dao的实现。

    @Repository注解的作用

    https://blog.csdn.net/wqh0830/article/details/96109587

    https://www.cnblogs.com/xinghaonan/p/12005401.html

    Mybatis Mapper动态代理方法 即 只写Dao接口 不写Dao的实现类

    https://blog.csdn.net/mxljiayou/article/details/52523263?t=1482072473653

    https://blog.csdn.net/java280580332/article/details/72123890?locationNum=7&fps=1

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.itheima.dao"/>
    </bean>
    
    镜花水月
  • 相关阅读:
    Codeforces 946D
    Codeforces 817F
    Codeforces 931F
    Codeforces 932D
    Graph HDU
    Chef and Graph Queries CodeChef
    Lucky Array Codeforces
    Calculation 2 HDU
    洛谷 P3455 [POI2007]ZAP-Queries || 洛谷P2522,bzoj2301
    洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568
  • 原文地址:https://www.cnblogs.com/fengbingshui/p/13586732.html
Copyright © 2011-2022 走看看