基于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
1 2 3 4 5 | package com.zk.myspring; public interface UserService { public void addUser(); } |
UserServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 | package com.zk.myspring; public class UserServiceImpl implements UserService{ @Override public void addUser() { // TODO Auto-generated method stub System.out.println( "UserService" ); } } |
ApplicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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
1 2 3 4 5 | package com.zk.myspring; public interface UserService { public void addUser(); } |
UserServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 | package com.zk.myspring; public class UserServiceImpl implements UserService{ @Override public void addUser() { // TODO Auto-generated method stub System.out.println( "UserService" ); } } |
TestDemo.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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
1 2 3 4 5 6 7 8 9 | <?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> |
运行效果图:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步