基于XML装配bean的解析
一、Bean的种类 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使用。 二、作用域 ? ? 取值: 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); //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> 运行效果图: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |