• spring笔记5 spring IOC的基础知识1


    1,ioc的概念

      Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合;

         ioc的实现方式有三种,属性注入,构造函数注入,接口注入,常用的是前面两种,后面的对类的侵入性太大,一般不用;

         spring就是一个第三方的依赖管理+容器,很轻松高效的实现了实例的创建,依赖关系的管理等底层功能,此外,还有Guice,plexus等第三方容器。

    2,反射

      每个对象在jre中都有一个Class对象,保存着它的元数据信息,通过Class对象,可以间接的访问对象的属性和方法;

          类加载器:四类类加载器:

    加载器 说明 补充
    根加载器 加载jre的核心类库  
    ExtClassLoader 加载jre的扩展类库  
    AppClassLoader 加载项目的classpath下的类  
    自定义ClassLoader 具体用途来定  

        采用全盘负责委托机制,即除非显示使用另外一个ClassLoader,或者使用原来的classLoader加载该类,以及引用类,依赖类;先委托父加载器寻找目标类,找不到的情况下再从自己的类路径中查找并装载目标类;

       利用反射获取构造方法,方法,字段,包,注解等信息,实例略;

    3,资源接口

      Resource,

     实现类:

    来个例子:

        @Test
        public void getResource() throws IOException {
    
            Resource resource  =new ClassPathResource("log4j.properties");
    
           String fileName=  resource.getFilename();
    
            String content= FileUtils.readFileToString(resource.getFile(), Charsets.UTF_8.name());
    
            logger.info(fileName + " 内容:" + content);
    
        }

    执行结果:

    2013-11-20 11:28:59 web.TestResource.getResource(32)---[0]
    [INFO] log4j.properties 内容:log4j.rootCategory=INFO, stdout,file

    
    

    ###. ������Ϊ stdout ������˵�����
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %C.%M(%L)---[%r]%n[%p] %m%n

     

    spring定义了一套资源加载接口ResourceLoader:支持ant风格和特殊标识:

    特殊标识 意义
    classpath: 类路径中加载
    file: 文件目录中加载,可使用绝对路径
    ftp:// ftp服务器中加载
    http:// http服务器中加载
    ? 匹配一个字符
    * 匹配任意个字符
    ** 匹配多级路径

     

    实现类:

    不过spring中最常用的是PathMatchResourcePatternResolver,支持ant风格和特殊标识

    4,三大接口BeanFactory ,ApplicationContext,WebApplicationContext的理解

    先看BeanFactory,最常见的是XmlBeanFactory,来张层级图;

    各种接口定义了XmlBeanFactory的功能:

    接口 功能
    BeanFactory 获取bean,简称,判断是否存在,是否单例
    ListableBeanFactory 集合形式查看bean

    ApplicationContext, spring容器,层级图,通过继承相关的接口,有了相关的功能;

    可以通过xml,注解,java类来配置ApplicationContext

    BeanFacotry是惰性初始化,第一次调用的时候才会组装好资源;

    ApplicationContext是启动的时候初始化好了所有的资源;

    WebApplicationContext ,spring web容器;

    spring web 容器依赖ServletContext,在web项目中必须配置才能完成启动,同时必须配置日志依赖;

    可以通过ContextLoaderServlet(现在的最新版本里已经去掉 3.2.5)或者ContextLoaderListener来完成启动

    5,bean的生命周期

    BeanFactory

    bean在容器中的生命周期
    返回 说明
    bean自身的方法 通过构造函数实例化,set,get方法设置属性,init,destroy方法初始化或者销毁
    Bean级别生命周期接口 BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean
    容器级别生命周期接口 InstantiationAwareBeanPostProcessor,BeanPostProcessor
       

    ApplicationContext

    同BeanFactory,但是会自动识别和装配后处理器;

  • 相关阅读:
    #4702. gcd
    独特的树叶

    搞笑的代码 ( funny )
    越野赛车问题
    删边(cip)
    最长公共子序列
    美食节
    线段树
    新年快乐
  • 原文地址:https://www.cnblogs.com/snidget/p/3433577.html
Copyright © 2020-2023  润新知