• spring笔记6 spring IOC的中级知识


    1,spring ioc的整体流程,xml配置

     

    spring ioc初始化的流程结合上图
    步骤编号 完成的工作
    1 spring容器读取配置文件,解析称注册表
    2 根据注册表,找到相应的bean实现类实例化bean
    3 把实例化之后的bean放到spring容器中
    4 spring开放准备好的bean供程序使用

    配置方法:

    常见的自定义命名空间:

    增加自定义的命名空间很easy,如果所示,独家秘籍····

    spring的常见的自定义命名空间
    简称 说明
    beans 配置bean
    aop aop的配置
    tx 声明式事物
    mvc mvc的配置
    util 简化某些标准配置
    jee java EE的EJB,jndi
    jdbc 配置数据库提供的schema
    jms jms配置
    lang 支持Jruby,Groovy的配置
    oxm xml映射的配置
    task 任务调度的配置
    tool 有用工具定义的配置

    2,依赖注入,注入参数,方法注入

     一般配置bean指定id,name不推荐使用;

    依赖注入主要有两种,即属性注入和构造函数注入,工厂方法注入,具体选择视实际情况来;

    属性注入:在xml中的bean节点中,通过<property name="xxx" value="xxx"/> 属性设置方法的前两个字符要全部大写或者小写;

    构造函数注入:在xml中的bean节点中,通过<constructor-arg index="n" type="XXX" value="XXX"/>,对于构造函数的循环依赖,把其中一个改造成属性注入即可解决;

    工厂方法注入:通过属性 factory-bean factory-method指定

    注入参数:

    字面值直接使用<value>来指定,特殊字符&xxx;来解决;比如大于 &lt; 小于 &gt; 连字符 &amp; 单引号 &apos;双引号   &quot;

    引用<ref bean="xxx"/> 引用存在于本配置文件或者父配置文件中;

    内部引用可直接定义bean

    特殊的null值通过<null>来指定

    支持级联的属性赋值;

    集合类型支持到List,Set,Map,Properties

    强类型同map

    集合还可通过 merge 属性指定合并,可通过util命名空间来简化集合配置,使用p空间来简化属性配置;

    自动装配:在bean中指定 autowire 类型可以是 byName,byType,constructor,autodetect,不推荐自动装配

    方法注入:

    lookup,一般用在单例的属性是原型的实例,视情况需要是否引入CGLib依赖

    <replace-method  name="方法名" replacer="替换接口实现类"> 可以替换方法,接口是MethodReplacer;

     3,bean之间的关系

    bean之间的关系分三类,分别是继承,依赖,引用

    继承通过在父bean中加个 abstract属性,子bean中加一个parent属性;

    依赖通过增加属性 depends-on="xxx"

    引用通过<idref bean="xxx">

    4,整合配置文件,bean的作用域,FactoryBean

    通过在主配置文件中增加<import resource="classpath:XXXX"/> 来整合

    bean的作用域,如果是web应用,除了singleton和prototype之外还有request,session,globalSession

    singleton是单例无状态的,spring的dao都可以采用单例的模式,spring放在了容器的缓存池里面;

    prototype每次都会实例化一个对象;

    要在web环境下使用其它的三种作用域,需要在web.xml中配置一个RequestContextListener;

    如果单例的或者原型的实例依赖web作用域的某个实例,在web作用的bean里面增加<aop:scoped-proxy/>

    如果实例化比较复杂,可以使用FactoryBean来定义实例;

    5,基于注解的配置

    四类注解来标识bean

    @Component 标识一般的bean

    @Repository 标识dao

    @Service       标识service

    @Controller   标识控制层

    配置扫描:<context:compnent-scan base-package="xxx" resource-patter="xxx"> 它的过滤方式有多种,annotation,assignable,aspectj,regex,custom;

    自动注入:

    @Autowired 有required属性标识缺失是否报错,Qualifier标识名称;可对属性和方法进行标注;

    其它的比如:@Inject @Resource功能一样,但是功能没它强大,可忽略;

    生命周期的支持:通过@PostConstruct 来定义init-method ,通过@PreDestroy来定义 destroy-method

    @Scope来定义作用域

    @Value来引用其它的bean的属性

    @Lazyl来定义是否延迟加载

    6,基于java类的配置

     这里省略,用的不多;

    7,小结

    最常用的是采用xml配置第三方的bean工具,本应用开发采用注解来配置;

  • 相关阅读:
    推荐系统:协同过滤基础
    roslyn
    动态生成wcf 服务端
    p2p协议
    Mybatis源码浅读一
    Django 使用es实现全文检索
    mac下gitlab鉴权失败修改密码
    Mako 模板用法
    fastapi 操作数据库
    mysql多表查询学习
  • 原文地址:https://www.cnblogs.com/snidget/p/3433889.html
Copyright © 2020-2023  润新知