Spring视频教程——依赖注入

    技术2022-07-10  153

    IOC(控制反转)也可以称之为DI(依赖注入):控制反转:将创建对象、属性值的方式进行了翻转,从new、setXxx(),_翻转为了_从springIOC容器getBean()依赖注入:将属性值注入给了属性,将属性注入给了bean,将bean注入给了ioc容器;

    三种方式的依赖注入、给各种集合类型的属性注入

    DI(依赖注入):举例说明:有两个类一个是Teacher、一个是Course,其中Course类中依赖于Teacher类,里面有教师的信息,这时候写配置文件xml的时候就可以写两个<>标签,其中Course类中含有Teacher类;

    IOC容器赋值: 如果是简单的Java类(8个基本类型+String),value;如果是对象类型,ref = "需要引用的id值" ,因此实现了对象与对象之间的依赖关系; 依赖注入的3种方式: set注入:通过setXXX()赋值,依赖注入底层是通过反射完成的;使用标签的关键字是<property....>构造器注入:通过构造方法赋值;使用标签的关键字是<constructor-arg.>,需要注意注入属性的顺序应该和构造方法属性的顺序一致,如果不一致要设置type、name或index进行指定;p 命名空间注入:首先要引入命名空间xmlns:p=....;然后直接在bean标签进行属性赋值;简单类型可以直接p:属性名="属性值",引用了类型(除了String)要通过p:...-ref="属性值";注意p之间有空格;

    方式一:

    方式二:

    方式三:

    注入各种集合数据类型:list set map properties  也是可以的;

    set 、list、数组各自有各自的标签<set>、<list>、<array>,但是也可以混着用;

    map使用<map> 搭配 <entry>标签

    特殊值的注入问题和各种类型的自动装配:

    value与<value>注入方式的区别:

                          

    其中赋值"" 或者null的时候,"" 可以直接不在标签中写值,null 的时候没有value值,并且要写成 <null/> 的形式;

                                       

    在 IOC 容器中定义 bean 的前提,该 bean 的类必须提供了无参构造;

    自动装配(只适用于 ref 类型):可以不再使用<>标签给course类中的teacher进行赋值,而是直接在bean中添加一个 autowire = "byName" 进行自动装配;自动装配虽然可以降低代码量,但是会降低程序的可读性,使用时需要谨慎;

    <bean ... class=" org.lanqiao.entity.Course" autowire="byname || bytype || constructor”> byName 本质是 byld

    byName:自动寻找其他bean的id值 = 该Course类的属性名byType:其他bean的类型(class)是否与该Course类的ref属性类型一致,但是如果有多个类型一致会出现问题;constructor:其他bean的类型(class)是否与Course类旳构造方法参数的类型一致;

    如果想以后给所有的bean标签自动装配,可以在头beans中写入:

    使用注解定义bean:通过注解的形式,将bean以及相应的属性值放入IOC容器中;

    范例:

    首先扫描该包有没有注解,如果有注解就把它放到IOC里面去;注解使用  符号;

    如果不清楚要用哪一层时使用:@Component 细化:如果很清楚在哪一层时:dao层注解--@Repository;service层注解:@Service;控制器层注解:@Controller;

    使用注解实现声明式事务:

    引入架包;

    配置:在xml文件中增加必要代码,<!--增加对事物的支持-->  <tx:annotation-driven transaction-manager="txManager" />

    使用:将需要成为事务的方法前面加上注解,@Transactional (readOnly=false,propagation=Propagation.REQUIRED) 要么都成功,要么都失败;
    Processed: 0.012, SQL: 9