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配置文件

          注入属性使用注解

原文地址:https://www.cnblogs.com/feizhai/p/8734903.html