Spring学习总结

  1. Spring核心机制是IOC和依赖注入

    Spring的控制反转:

    IOC即控制反转,实现了解耦,对Bean的统一管理,实现依赖关系的反转,Ioc是靠工厂模式+代理模式实现的
    Spring对Bean的管理是通过从属于Spring的配置文件来维护bean的依赖关系的
    

    Spring依赖注入:

    1、set注入
        要求Java类中有属性以及属性的set方法,配合config.xml中对应bean的property
    2、构造器注入
        要求Java类中构造方法有参数(给属性赋值),配合config.xml中对应bean的constructor-arg
    3、注解的方式注入
    

    注入方式的优劣:

    用set注入由于提供了set()方法不能保证相关数据在执行时不被更改设定值,而构造注入会在构造方法上留有很参数不易阅读建议set注入为主,构造注入为辅  
    
  2. Spring容器

    Spring是作为一个容器存在的,应用中所有组件都处于Spring的管理之下,都被Spring以Bean的方式管理。Spring容器是生成Bean的工厂,所有组件都被当成Bean处理。Bean是Spring容器的基本单位。
    (1)Bean是定义在Spring配置文件中的,之间可以互相协同工作完成复杂的关系
    (2)bean的属性:

    id:   唯一标识,不能重复
    name: 别名,可以配置多个别名用逗号隔开,程序中也可以使用
          name的值获取该Bean实例。
    class: Bean的来源,完整的包名和类名,必须指定
    scope: 作用域,支持五种作用域,如下:
           1、singleton:单例模式,每次通过getBean方式获取实例时都是
            返回同一个Bean实例,默认模式
           2、prototype:原型模式,每次通过getBean方式获取实例时都会
            产生新的Bean实例
    

    (3)Bean的生命周期

     Bean的定义
    
     Bean的初始化
    
        方法一: Bean对应java类实现InitializingBean接口,覆盖
                afterPropertiesSet()方法
        方法二: 配置文件<bean>中声明init-method="init",再在 
                java类中写init()方法
    
     Bean的应用
    
        方法一: 使用BeanFactory
        方法二: 使用ApplicationContext
    
     Bean的销毁
    
        方法一:Bean对应的java类中实现DisposableBean接口,
                覆盖destroy()方法
        方法二:配置文件<bean>中声明destroy-method="cleanup",
                再在java类中写cleanup()方法
    

    (3)Bean的管理

     BeanFactory:  延迟载入所有Bean直到getBean()方法被调用时Bean才创建
     ApplicationContext: 在上下文启动后预载入所有的单实例Bean,
                         确保当需要的时候它们已经准备好了
    

    (4)Bean的依赖关系

     local: <property name="a"> <ref local="b"/> </property>
     bean: <property name="a">  <ref bean="b"/>  </property>
     parent: <property name="a" ref="b"> </property>
    

    (5)Bean的自动装配

     自动装配可以相互协作bean之间的关联关系,自动指定被依赖的bean
     使用property和constructor-arg注入依赖会覆盖自动装配。
     Bean元素的自动装配时通过"autowire"属性来指定的,共有五种取值:
    
     1. byName
        根据java类中的属性名称自动在配置文件中根据bean的id值找匹配bean
     2. byTyep
        根据java类中的属性类型自动在配置文件中根据bean的class属性
        找匹配的bean,没有匹配的bean不会报错,可以通过设置依赖检
        查抛出异常(dependency-check="objects")
     3. constructor
        根据构造方法的参数类型来匹配,匹配规则同byType
     4. autodetect
        检查java类的内部来选择使用byType或constructor
     5. no
        不使用自动装配,必须通过ref来引用其他Bean为属性赋值
    

    (5)两种后处理器

     Bean后处理器:
    
         负责处理容器中所有的Bean实例
         实现BeanPostProcessor接口
         覆盖两个方法(Bean的初始化前后被调用的方法),
         注册该接口实现的Bean:  <bean class=""></bean> 
    
     容器后处理器
    
         负责处理容器本身
         实现BeanFactoryPostProcessor接口,
         覆盖方法(容器初始化成功被调用的方法)
         注册该接口实现的Bean
    

    代理机制

    SpringAop(AspectJ/POJO/XML)

  3. Spring注解

    1. 注解为bean:
      @Component、@Controller、@Service、@Repository
      分别代表:
      组件、控制层、业务层、数据访问层(暂时没区别)
    2. 注解依赖注入( 该自动注入不需要结合set、get方法):
      @Autowired、@Resource
    3. 使用注解必需开启自动扫描:
      @ComponentScan()、
      <context:component-scan base-package=""/>
  4. Spring源码解析

    FactoryBean支持:

    BeanFactory: Sping IOC容器的根接口,
                            提供获取bean,是否包含bean,是否单例与原型,
                            获取bean类型,bean别名的api
    HierarchicalBeanFactory:继承以上接口,
                            新增获取父BeanFactory的方法定义
    ConfigurableBeanFactory:继承以上接口,
                            继承SingletonBeanRegistry接口,
                            并提供factory的配置功能
    

单例管理:

    SingletonBeanRegistry: 提供单例注册,查询服务
    DefaultSingletonBeanRegistry: 实现以上接口,
                         继承SimpleAliasRegistry,
                         单例的生命周期管理(创建,维护,销毁)
    FactoryBeanRegistrySupport: 继承上面的类,
                         添加工厂方式创建FactoryBean的支持
    AbstractBeanFactory:继承上面的类,
                         实现ConfigurableBeanFactory接口,
                         BeanFactory的抽象实现!!

别名管理:

    AliasRegistry:定义beanName的别名管理
    SimpleAliasRegistry:实现别名管理接口基础上
                    添加了canonicalName查找真实名称
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值