Spring学习-1

一:Spring中配置文件的加载原理:

二:常用的Spring配置文件的加载方式:

有三种分别是:

  • 1:使用我们当前项目的的路径加载:
    即使用ClassPathXmlApplicationContext("classpath:xxx.xml")类加载;
  • 2:使用磁盘文件目录加载
    FileSystemXmlApplicationContext("配置文件所在的磁盘路径");
  • 3:在Web.xml文件中使用Listener来加载:
    spring3.0中已经将org.springframework.web.context.ContextLoaderServlet该类废弃
    * <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-iod.xml</param-value>
    </context-param>
    * <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    然后在
    web项目中使用以下代码获取相应的bean对象:
    ServletContext context = req.getSession().getServletContext();
    ApplicationContext con = WebApplicationContextUtils.getWebApplicationContext(context);
    shop s = (shop)con.getBean("oneInterface");

三:Spring的配置中的bean属性用法:

  • 1:id唯一标识一个bean对象;

  • 2:class:表示要实例化哪一个类的对象

  • 3:property:要实例化的对象的属性

  • 4:scope:它的值有5个:

    • singleton:表示单例;每一个bean容器中只存在一个对象(default)
    • prototype表示每次请求都会创建一个对象;
    • request在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    • session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    • globel session:在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。
      lazy-init(默认为“default”):用来定义这个Bean是否实现懒初始化。如果为“true”,它将在BeanFactory启动时初始化所有的Singleton Bean。反之,如果为“false”,它只在Bean请求时才开始创建Singleton Bean。
  • 5:autowire(自动装配,默认为“default”):它定义了Bean的自动装载方式。
    自动装配就意思就是我们不需要在Bean上增加属性,IOC容器会根据我们选择的装配模式去自己给我们相应的类的属性赋值;

    • 1、“no”:不使用自动装配功能。(default)
    • 2、“byName”:把Bean的属性具有相同名字的的其他Bean自动装配到Bean的对应属性中。
    • 3、“byType”:把与Bean的属性具有相同类型的的其他Bean 自动装配Bean的对应属性当中。
    • 4、“constructor”:把与Bean 的构造器入参具有相同类型的其他Bean自动装配到构造器的对应入参中。
    • 5、“autodetect”:通过Bean类的反省机制(introspection)决定是使用“constructor”还是使用“byType”。
      首先尝试使用constructor进行自动装配,如果失败,再使用byType进行自动装配
  • 6:dependency-check(依赖检查,默认为“default”):它用来确保Bean组件通过JavaBean描述的所以依赖关系都得到满足。在与自动装配功能一起使用时,它特别有用。

  • 1、 none:不进行依赖检查。

  • 2、 objects:只做对象间依赖的检查。

  • 3、 simple:只做原始类型和String类型依赖的检查

  • 4、 all:对所有类型的依赖进行检查。它包括了前面的objects和simple。

  • 7.depends-on(依赖对象):这个Bean在初始化时依赖的对象,这个对象会在这个Bean初始化之前创建。

  • 8:init-method:用来定义Bean的初始化方法,它会在Bean组装之后调用。它必须是一个无参数的方法。

  • 9:destroy-method:用来定义Bean的销毁方法,它在BeanFactory关闭时调用。同样,它也必须是一个无参数的方法。它只能应用于singleton Bean。

  • 10: factory-method:定义创建该Bean对象的工厂方法。它用于下面的“factory-bean”,表示这个Bean是通过工厂方法创建。此时,“class”属性失效。

  • 11:factory-bean:定义创建该Bean对象的工厂类。如果使用了“factory-bean”则“class”属性失效。

四:Spring的生命周期方法:

init和destory方法
这些方法会在Bean容器初始化时和Bean容器销毁时就去调用。
有三种配置方式:

  • 1:直接在Bean里面配置 每一个bean的属性里面都有一个init-method和destory-method方法;
例子
 <bean id="shop" class="com.cp.insist.impl.shopimp" init-method="init" destroy-method="destory"></bean>
相应的类中也要有对应的init方法和destory方法   
  • 2:配置全局的默认的初始化init-method和销毁destory-method方法,在Beans 这个标签里面有一个default-init-method和default-destory-method方法;
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd" 
        default-init-method="init" default-destroy-method="destory">
  • 3:实现InitializingBean,DisposableBean这两个接口并重写两个接口里面的方法
@Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("我是初始化方法afterPropertiesSet");
        
    }
    @Override
    public void destroy() throws Exception {
        
        System.out.println("我是销毁方法destory");
    }

五:Spring中以Aware结尾的接口使用说明:

Aware,即感知,是Spring IOC的一个特性,当实现了对应的Aware接口时,BeanFactory工厂会在生产bean时给bean注入对应的属性,即为该bean增强一定功能。
Spring中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实现这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实现BeanFactoryAware的Bean在初始后,Spring容器将会注入BeanFactory的实例,而实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例等等。

Aware相关接口.png

如上图所示:Spring中有很多实现了Aware的接口
下面介绍几种常用的:

  • 1:ApplicationContextAware:给实现该接口的bean注入ApplicationContext容器

  • 2:ApplicationEventPublisherAware:给实现该接口的bean注入ApplicationEventPublisher对象,以供分发事件使用。

  • 3:BeanClassLoaderAware:给实现该接口的bean注入该类的类加载器。

  • 4:BeanFactoryAware:给实现该接口的bean注入当前BeanFactory容器,此时该bean就持有BeanFactory容器功能。

  • 5:BeanNameAware:给实现该接口的bean注入bean的名称。

public class school implements ApplicationContextAware{
    private ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        this.context = arg0;
    }
    public void getBean(){
        ((userdaoImp)context.getBean("userdao1")).add("ceshi ");
        System.out.println(context.hashCode());
    }
}

六:Spring中读取配置文件的Resource接口介绍:

在Spring内部,针对于资源文件有一个统一的接口Resource表示。

  • 其主要实现类有
    ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource、ServletContextResource和InputStreamResource。
    Resource接口中主要定义有以下方法:
  • 1: exists():用于判断对应的资源是否真的存在。
  • 2:isReadable():用于判断对应资源的内容是否可读。需要注意的是当其结果为true的时候,其内容未必真的可读,但如果返回false,则其内容必定不可读。
  • 3: isOpen():用于判断当前资源是否代表一个已打开的输入流,如果结果为true,则表示当前资源的输入流不可多次读取,而且在读取以后需要对它进行关闭,以防止内存泄露。该方法主要针对于InputStreamResource,实现类中只有它的返回结果为true,其他都为false。
  • 4: getURL():返回当前资源对应的URL。如果当前资源不能解析为一个URL则会抛出异常。如ByteArrayResource就不能解析为一个URL。
  • 5: getFile():返回当前资源对应的File。如果当前资源不能以绝对路径解析为一个File则会抛出异常。如ByteArrayResource就不能解析为一个File。
  • 6: getInputStream():获取当前资源代表的输入流。除了InputStreamResource以外,其它Resource实现类每次调用getInputStream()方法都将返回一个全新的InputStream。
    • A:ClassPathResource可用来获取类路径下的资源文件。假设我们有一个资源文件test.txt在类路径下(classpath路径),我们就可以通过给定对应资源文件在类路径下的路径path来获取它,new ClassPathResource(“test.txt”)。
    • B: FileSystemResource可用来获取文件系统里面的资源。我们可以通过对应资源文件的文件路径来构建一个FileSystemResource。FileSystemResource还可以往对应的资源文件里面写内容,当然前提是当前资源文件是可写的,这可以通过其isWritable()方法来判断。FileSystemResource对外开放了对应资源文件的输出流,可以通过getOutputStream()方法获取到。
    • C:UrlResource可用来代表URL对应的资源,它对URL做了一个简单的封装。通过给定一个URL地址,我们就能构建一个UrlResource。
  • D: ByteArrayResource是针对于字节数组封装的资源,它的构建需要一个字节数组。
  • E:ServletContextResource是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。ServletContextResource持有一个ServletContext的引用,其底层是通过ServletContext的getResource()方法和getResourceAsStream()方法来获取资源的。
  • F:InputStreamResource是针对于输入流封装的资源,它的构建需要一个输入流。

调用getResource方法时可以在里面传递参数(”url”或者“classpath”,"file")前缀分别表示从不同的地方下载资源:(url表示从网上下载资源;classpath:表示从项目根路径;file表示从磁盘路径下载相应资源)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 一、Spring框架 1.1 Spring框架是什么 Spring是一种容器框架,用于配置各个组件(bean)并且...
    Jane_Static阅读 387评论 0 0
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • 上一篇:Spring学习笔记(四、Bean装配(上)) 这篇讲解Bean管理的注解实现及例子 主要内容有: Cla...
    鲁克巴克诗阅读 1,266评论 2 6
  • 企业借款对象不同,税务处理方式不同,企业借款对象有以下几种:金融企业,非金额企业,自然人,关联方,企业内部资金统借...
    timo酱酱阅读 1,052评论 0 1