• 基于XML装配bean的解析-Bean的作用域


    一、Bean的种类
    1、普通bean:<bean  id=""  class="A"> ,spring直接创建A实例,并返回。

    2、FactoryBean:是一个特殊的bean,具有工厂生成对象的能力,只能生成特定的对象。bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。

    <bean   id="" class="FB"> 先创建FB实例,使用调用getObject()方法,并返回方法的返回值

    FB fb = new FB();

    return fb.getObject();

    BeanFactory 和 FactoryBean 对比?

    BeanFactory:工厂,用于生成任意bean。

    FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂bean用于生产代理。

    <bean  id=""   class="....ProxyFactoryBean"> 获得代理对象实例,AOP使用。

    二、作用域
    作用域:用于确定Spring创建Bean的实例个数。

     

    取值:

    singleton 单例,是默认值。

    prototype 多例,每执行一次getBean将获得一个实例。例如:struts整合spring,配置action多例。

    配置信息:

    <bean   id=""   class=""    scope="">

    例如:

    <bean id="userServiceId"   class="com.zju.scope.UserServiceImpl"    scope="prototype"></bean>

    例1:singleton 单例

    UserService.java

    package com.zk.myspring;
    
    public interface UserService {
    	public void addUser();
    }
    

    UserServiceImpl.java

    package com.zk.myspring;
    
    public class UserServiceImpl implements UserService{
    
    	@Override
    	public void addUser() {
    		// TODO Auto-generated method stub
    		System.out.println("UserService");
    	}
    
    }
    

    ApplicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    
    <!-- 默认scope为singleton -->
    <bean id="userserviceId"  class="com.zk.myspring.UserServiceImpl" scope="singleton"></bean>
    </beans>
    

    TestDemo.java

    package com.zk.myspring;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    
    public class TestDemo {
    	
    	@Test
    	public void demo1(){
    		String xmlpath="ApplicationContext.xml";
    		ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
    		UserService us=ac.getBean("userserviceId", UserServiceImpl.class);
    		UserService us2=ac.getBean("userserviceId", UserServiceImpl.class);
    		//us.addUser();
    		//us2.addUser();
    		System.out.println(us);
    		System.out.println(us2);
    		System.out.println(us==us2);
    	}
    }
    

    运行效果图:

    例2:prototype 多例

    UserService.java

    package com.zk.myspring;
    
    public interface UserService {
    	public void addUser();
    }
    

    UserServiceImpl.java

    package com.zk.myspring;
    
    public class UserServiceImpl implements UserService{
    
    	@Override
    	public void addUser() {
    		// TODO Auto-generated method stub
    		System.out.println("UserService");
    	}
    
    }

    TestDemo.java

    package com.zk.myspring;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    
    public class TestDemo {
    	
    	@Test
    	public void demo1(){
    		String xmlpath="ApplicationContext.xml";
    		ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
    		UserService us=ac.getBean("userserviceId", UserServiceImpl.class);
    		UserService us2=ac.getBean("userserviceId", UserServiceImpl.class);
    		//us.addUser();
    		//us2.addUser();
    		System.out.println(us);
    		System.out.println(us2);
    		System.out.println(us==us2);
    	}
    }
    

      

    ApplicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <bean id="userserviceId"  class="com.zk.myspring.UserServiceImpl" scope="prototype"></bean>
    </beans>
    

    运行效果图:

  • 相关阅读:
    Lucene全文检索
    数据库设计样例
    tortoisegit 保存用户名密码
    ServletContextListener 解析用法
    !! 浅谈Java学习方法和后期面试技巧
    佳能2780打印机老出5100错误
    蓝屏
    股市口诀
    如何准确进行T+0操作
    通达信:显示K线图日期
  • 原文地址:https://www.cnblogs.com/longlyseul/p/9977390.html
Copyright © 2020-2023  润新知