Spring系列1--IOC

目录

 

1、spring简介

2、IOC

2.1 什么是IOC

2.2 IOC底层原理:

2.3 两个重要接口

2.4 Bean管理(XML)

2.4.1.创建对象

2.4.2.注入属性

2.4.3.xml注入其他类型的属性

2.4.4.xml注入集合属性

2.4.5.IOC操作Bean管理

2.4.6.bean的作用域

2.4.7.bean的生命周期

2.4.8.自动装配 

2.4.9.外部属性文件

2.5 IOC的Bean管理(注解)

2.5.1创建对象

2.5.2 属性注入

2.5.3 纯注解开发


1、spring简介

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

2、IOC

2.1 什么是IOC

控制反转。把对象创建和对象之间的调用过程都交给spring管理,主要目的是减低代码的耦合度。

2.2 IOC底层原理:

(1)IOC的底层原理主要包括xml解析(注解解析),工厂设计模式 以及反射(得到类的字节码文件)。

(2)IOC过程:

     创建xml配置文件,配置要创建的对象,以及对象中间的引用关系;

     创建工厂类;

     解析xml文件;

     通过反射创建对象。

2.3 两个重要接口

        IOC的思想源于容器,使用容器来管理对象(对象的创建、获取、销毁等),底层基于工厂模式实现。Spring中提供IOC容器的两种实现方式,即两个接口。

    (1)BeanFactory

          IOC容器最基本的实现方式,Spring内部的使用接口,一般不提供给开发人员使用。特点是,加载配置文件时不会创建对象,在获取或使用对象时才会创建。

    (2)ApplicationContext

          是BeanFactory接口的子接口,提供了更加强大的功能,一般由开发人员使用。加载配置文件时会创建配置文件中的对象。

2.4 Bean管理(XML)

        通俗的讲,当我们创建了一个容器(BeanFactory的实现类)后,spring会解析配置文件,然后跟据配置文件创建对象,并把这些对象放进容器中。使用时用户不需要自己再去创建对象,而是直接通过容器去获取,这便是spring的bean管理的核心。

2.4.1.创建对象

  在spring的配置文件中,使用bean标签来创建对象,默认会调用类的无参构造方法

   

2.4.2.注入属性

 使用set方法进行注入:实体类中必须有对应的set方法,动态代理生成对应的bean时会调用

 使用构造方法注入:实体类中必须有对应的构造方法,动态代理生成对应的bean时会调用。

2.4.3.xml注入其他类型的属性

1. 特殊符号

     转义:

    

    使用CDATA:<![CDATA[具体内容]]>

    

2. 外部bean

     

2.4.4.xml注入集合属性

1.注入数组

    

2.注入List

   

3.注入map

    

4.集合的元素设置为对象

 

2.4.5.FactoryBean

1. spring中包含两种bean,一种是普通bean,一种是工厂bean(FactoryBean)

2. 普通bean:得到的对象类型就是在配置文件中定义的bean类型

定义:

获取:

3.工厂bean:得到的对象类型可以和在配置文件中定义的bean类型不一样

(1)创建类,实现FactoryBean接口,覆写getObject()方法

(2)定义

(3)获取

FactoryBean的实现原理,在创建对象时,调用了getObject()方法,并将其返回值放入IOC容器中。

2.4.6.bean的作用域

单例(singleton)和多例(prototype),默认spring创建的对象为单例,可以设置为多例。

singleton和prototype的区别:scope设置为singleton,加载spring配置文件时创建对象;scope设置为prototype,调用getBean()时才会创建一个新的对象。

2.4.7.bean的生命周期

生命周期:对象创建->对象销毁的过程

(1)创建bean实例

(2)为bean里面的属性设置值和对其他bean的引用

(3)把bean的实例传递给bean的后置处理器,调用postProcessBeforeInitialization()。

       将实现了BeanPostProcessor接口的类注入到容器中,生成后置处理器,这样容器会对所有的bean执行该后置处理器。

(4)调用bean里面的初始化方法

(5)把bean的实例传递给bean的后置处理器,调用postProcessAfterInitialization()。

(6)bean可以使用

(7)当容器关闭时,调用bean的销毁方法

2.4.8.自动装配 

<bean>标签中有一个autowire属性,可以根据属性的类型(byType)和名称(byName)注入

byName:

byType:

2.4.9.外部属性文件

如数据库连接相关信息,将数据库信息写到database.properties文件中,然后在spring的配置文件中引用database.properties文件。

(1)加入context命名空间。

(2)编写database.properties文件

(3)<context:property-placeholder/>指定database.properties文件路径

(4)在spring配置文件中引用database.properties中的配置

2.5 IOC的Bean管理(注解)

2.5.1创建对象

@Component:普通bean

@Service:Service层

@Contoller:Web层

@Repository:dao层

(1)引入spring-aop依赖

(2)在spring配置文件中开启组件扫描

 引入context命名空间

  开启组件扫描<context:component-scan/>,告诉spring扫描哪些包里面的注解。

(3)在类上添加对应的注解 (默认生成的对象名称为该类名称的首字母小写)

(4)测试

2.5.2 属性注入

@AutoWired 根据属性类型进行自动注入

    (1)创建dao对象,在对应的类上面加创建对象的注解(为验证确实是根据类型注入,这里将dao创建的对象名设置为dao)

      

    (2)在Service类中属性上面加上注入属性的注解(不需加属性的set方法

      

    (3)测试

      

@Qualifier 根据属性名称进行注入

      如果被注入的类型有多个对象,这时仅使用@AutoWired会抛异常NoUniqueBeanDefinitionException。

      

      (1)创建类DemoDao1和DemoDao同时实现接口DemoDao

        

       

    (2)在Service类中属性上面加上注解@AutoWired和@Qualifier

       

    (3)测试

       

@Resource 可以根据类型也可以根据名称注入(javax自带的,不建议使用)

       根据类型注入@Resource

       根据名称注入@Resource(name = "被注入的对象名称")

@Value 注入简单类型,@Value(value = "")

2.5.3 纯注解开发

1.创建配置类ConfigClass,代替xml配置文件,@Configuration;@ComponentScan扫描包

2.new AnnotationConfigApplicationContext(ConfigClass.class)获取IOC容器

3.测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值