美文网首页
Spring学习-1

Spring学习-1

作者: cp_insist | 来源:发表于2017-01-03 21:25 被阅读0次

一: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表示从磁盘路径下载相应资源)

相关文章

网友评论

      本文标题:Spring学习-1

      本文链接:https://www.haomeiwen.com/subject/nxagvttx.html