zoukankan      html  css  js  c++  java
  • Spring中的Ioc控制反转与DI注入

    Spring的控制反转

      1.spring的介绍

       spring是一款很受欢迎的java开源框架,核心全程围绕着BeanFactory展开,构成如下图。

           

      2.IOC控制反转

        2.1定义:把对象创建交给spring管理,不用new的方法,也不用工厂模式

        2.2原理:1.xml配置文件,2.dom4j解析xml,3.工厂设计模式,4.反射

        2.3使用:1.配置文件方式,2.注解方式

      

      3.IOC注入bean管理

        3.1.1 xml配置方式

             1.就是xml配置文件中的spring创建对象的方式,也就是bean标签的配置

             2.实例化方式:

                 2.1:使用类无参构造器(最常用)

                 2.2:使用静态工厂

                 2.3:使用实例工厂

        3.1.2 常见属性

            1.id:起名字根据id属性值得到配置对象,可以起任意命名,但不能包含特殊符号

            2.class:创建对象所在类的全路径

            3.scope:1.bean的作用范围

                       2.scope取值:singleton 单例,是默认值

                                 prototype多例

                                 request 将对象存到request域中

                                 session 将对象存到Session域中

                                 globalSession 将对象存到globalSession域

      

        3.1.3属性注入

            1.创建对象时,设置属性值

            2.方式:1.使用有参构造器   在bean标签中使用constructor-arg子标签

                      2.使用set方式(最为常用) 在bean标签中使用property子标签

                      3.使用接口(基本不用,spring不支持这种方式)

            3.注入复杂类型属性:Array 使用bean的子标签property的list子标签

                               List 使用bean的子标签property 的List 子标签

                               Map 使用 bean 的子标签 property 的map 子标签

                               Property 使用bean的子标签property的props子标签

        4.举例    

     <!--1. set类型注入-->
    <bean id="per" class="com.per">
    <property name = "id" value="95001"/>
    <property name = "num1" value="003"/>
    <property name = "name" value="张小三"/>
    </bean>
    <bean id="userInfo" class="com.userInfo">
    <property name = "username" value="张三"/>
    <property name = "number" value="1001"/>
    <property name = "p" ref="per"/>
    </bean>
    <!--2.含有list或者map注入方式-->
    <bean id="userInfo" class="com.userInfo">
    <property name="username" value="张三"/>
    <property name="number" value="1001"/>
    <property name="per">
    <list>
    <value>张三</value>
    <value>李四</value>
    <value>王五</value>
    <value>hello</value>
    </list>
    </property>
    </bean>

        3.2.1 通过注解的方式对bean注入

              1.写法:@注解名称(属性名称=属性值),可以在类,方法,属性上使用注解。

                    注解可以替代配置文件,但不可能完全不配置,只是减少配置罢了

              2.开启注解扫描:在xml中配置<context:compoment-scan base-package=“”></con

                           Text:compoment-scan>base-package指定包名spring会扫描

              3.创建对象注解:@Component(@Controller:web层,@Service:业务层

        @Repository:持久层这三个注解是component注解的衍生注解,为了是让标注类本身的用途清晰,目前这四个注解功能是一致的,spring后续版本会对其增强)

        Bean中的scope属性对应的注解为@Scope,在四个注解下面使用即可

       4.注入属性的注解:@Autowired根据类名自动找到对应的对象实例

                                   @Resource(name=”要引入的对象在类注解中value中指定的对象名”)可以指定对象

            5.注入属性的注解例子

              5.1 @component,@Controller ,@Service, @Repository注入方式

                  首先xml文件(定义扫描器)

                  <!-- 扫描器 -->
    <context:component-scan base-package="/com"/>

         描述,装配时使用的是@value(用来装配对象属性)@Autowired(装配对象域属性,属于byType注入)@Resource(“值”)(对象域属性,属于byName注入)   @Resource(不带参数就是byType注入)(注意:@Qualifier(“”)也是byName注入,但是前面必须要有@Autowired)

        5.2 bean的生命始末

                   @PostConstruct(初始),@preDestroy(销毁)(了解内容)

             5.3 使用javaconfig来配置(了解内容)

             5.4 使用junit4测试(了解内容)

             5.5 xml文件配置的优先级比注解的要高

        3.2.2 xml配置文件与注解混合使用

              创建对象使用xml配置文件

              注入属性使用注解

  • 相关阅读:
    超详细:idea中同一项目同时使用Git与SVN,切换版本控制
    MailKit在.NetCore5下发送邮件 An error occurred while attempting to establish an SSL or TLS connection
    ClickHouse学习系列之七【系统命令介绍】
    ClickHouse学习系列之六【访问权限和账户管理】
    ClickHouse学习系列之五【系统库system说明】
    ClickHouse学习系列之四【副本&分片部署说明】
    MongoDB4.2 分片扫盲说明
    MongoDB4.2 副本集扫盲说明
    【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)
    【工程应用四】 基于形状的多目标多角度的高速模板匹配算法进一步研究。
  • 原文地址:https://www.cnblogs.com/feizhai/p/8734903.html
Copyright © 2011-2022 走看看