ApplicationContext实现类和Bean标签及其属性

一、ApplicationContext实现类
*  ClassPathXmlApplicationContext :  加载类路径下的spring配置文件
*  FileSystemXmlApplicationContext:加载本地磁盘下的spring配置文件
二、spring框架的Bean管理的配置文件方式

1、 id属性和name属性的区别

* id        -- Bean起个名字,在约束中采用ID的约束,唯一,必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号  id:不能出现特殊字符

* name      -- Bean起个名字,没有采用ID的约束(了解)现在不使用name了,因为struts1已经不使用了
    * 取值要求:name:出现特殊字符.如果<bean>没有id的话 , name可以当做id使用
    * Spring框架在整合Struts1的框架的时候,Struts1的框架的访问路径是以/开头的,例如:/bookAction

2、 class属性 – Bean对象的全路径
3、scope属性 – scope属性代表Bean的作用范围

* singleton         -- 单例(默认值)加载配置文件的时候,创建对象,只创建一个。很大程度上可以减少内存的开销。
* prototype         -- 多例,每次从容器中获取对象,才会创建实例对象。销毁工作不由容器负责。
* request           -- 多例,应用在Web项目中,每次HTTP请求都会创建一个新的Bean
* session           -- 多例,应用在Web项目中,同一个HTTP Session 共享一个Bean  一个会话
* globalsession     -- 应用在Web项目中,多服务器间的session。很多人去访问百度,百度为每个人保存一个session。百度下有很多产品,比如你现在正在访问百度文库,然后又去访问百度音乐,这时你不用去重新登录,因为两个产品之间共享了一个Session。
*  一般singleton与prototype使用的较多

4、Bean对象的创建和销毁的两个属性配置

* 说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
* init-method       -- 初始化方法,当bean被载入到容器的时候调用init-method属性指定的方法
* destroy-method    --销毁方法, 当bean从容器中删除的时候调用destroy-method属性指定的方法
    * 想查看destroy-method的效果,有如下条件
        * scope= singleton有效
        * web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)
三、运行例子

1、bean配置文件

scope=“singleton” 单例时

<bean id="us" class="cn.tx.service.UserServiceImpl" 
      scope="singleton" init-method="init" destroy-method="destory"/>

2、实现类

package cn.tx.service;

public class UserServiceImpl implements UserService{

    public UserServiceImpl(){
        System.out.println("UserServiceImpl对象被创建...");
    }

    public void hello() {
        System.out.println("Hello IOC");
    }

    //初始化方法
    public void init(){
        System.out.println("对象创建完成,进行初始化操作!!");
    }

    //销毁方法
    public void  destory(){
        System.out.println("销毁对象!!");
    }
}

3、测试类

@Test
public  void run3(){
    //创建spring的IOC的工厂,加载src目录下的配置文件,把配置文件中创建成对象,存储到IOC容器中。
    //ClassPathXmlApplicationContext :加载类路径下的spring配置文件
    //FileSystemXmlApplicationContext:加载本地磁盘下的spring配置文件
    ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");

   System.out.println("===============================");
    //从容器中获取对象就ok. Map<"us",对象>
    UserService us= (UserService) ac.getBean("us");
    //调用对象方法即可
    us.hello();
}

4、运行结果:
在这里插入图片描述

从运行结果我们可以看出单例模式时配置文件一加载,实例对象就会被创建。

scope=“prototype” 多例时

<bean id="us" class="cn.tx.service.UserServiceImpl" 
      scope="prototype" init-method="init" destroy-method="destory"/>

运行结果:

扫描二维码关注公众号,回复: 11237552 查看本文章

在这里插入图片描述

从运行结果中我们可以看出 需要从IOC容器中获取对象时才会创建实例对象。

猜你喜欢

转载自blog.csdn.net/weixin_44001568/article/details/105749907