Spring学习----- BeanFactory
Spring 作为一种IOC容器最大的目的就是降低组件与组件之间的依赖关系。而BeanFactory作为整个Spring IOC容器的核心使用了一种统一的方法来装配所有的应用对象,通过Java的反射机制和依赖注入(Dependency Injection)来实现这一装配过程,使受之管理的对象无需知道Spring的存在(受管对象甚至不用import 任何Spring的class),同时也降低了组件间的依赖程度,同时受管对象的生命周期由BeanFactory来统一管理,开发者就不用实现大量的自制的工厂Singleton。
注:以下那些受Spring IOC容器即BeanFactory控制管理的对象简称bean对象
一. BeanFactory
作为整个Spring IOC容器核心Interface BeanFacotry被放在包 org.springframework.beans.factory中,这是一个非常简单的接口,如果Spring现有的BeanFactory的实现无法满足你的要求(这种情况应该不多J),你可以很容易创建自己的一个实现。
public interface BeanFactory { Object getBean(String name) throws BeansException; Object getBean(String name, Class requiredType) throws BeansException; boolean containsBean(String name); boolean isSingleton(String name) throws NoSuchBeanDefinitionException; String[] getAliases(String name) throws NoSuchBeanDefinitionException;}
package net.hashmap.spring.ioc.example.dao;public interface AbstractDAO { public void insert(); public void update(); public void delete(); public void get();}
package net.hashmap.spring.ioc.example.dao.support;import net.hashmap.spring.ioc.example.dao.AbstractDAO;public class HibernateDAO implements AbstractDAO { public void insert() { System.out.println("This is HibernateDAO.insert"); } public void update() { System.out.println("This is HibernateDAO.update"); } public void delete() { System.out.println("This is HibernateDAO.delete"); } public void get() { System.out.println("This is HibernateDAO.get"); }}
package net.hashmap.spring.ioc.example.dao.support;import net.hashmap.spring.ioc.example.dao.AbstractDAO;public class JdbcDAO implements AbstractDAO { public void insert() { System.out.println("This is JdbcDAO.insert"); } public void update() { System.out.println("This is JdbcDAO.update"); } public void delete() { System.out.println("This is JdbcDAO.delete"); } public void get() { System.out.println("This is JdbcDAO.get"); }}
package net.hashmap.spring.ioc.example.logic;import net.hashmap.spring.ioc.example.dao.AbstractDAO;public class LogicBusinessImpl { private AbstractDAO _dao; public AbstractDAO getDao() { return _dao; } public void setDao(AbstractDAO _dao) { this._dao = _dao; } public void BusinessHandle() { _dao.insert(); _dao.get(); _dao.update(); _dao.delete(); }}
<?xml version="1.0" encoding="UTF-8"?><beans> <bean id="hibernatedao" /> <bean id="jdbcdao" /> <bean id="HLogicImpl" /> </property> </bean> <bean id="JLogicImpl" /> </property> </bean></beans>
Resource res = new ClassPathResource("bean.xml");XmlBeanFactory bf = new XmlBeanFactory(res);LogicBusinessImpl HbuisImpl = (LogicBusinessImpl ) bf.getBean("HLogicImpl");HbuisImpl.BusinessHandle();System.out.println("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");LogicBusinessImpl JBuisImpl = (LogicBusinessImpl ) bf.getBean("JLogicImpl");JBuisImpl.BusinessHandle();