用户模型类User.java
package com.bebig.model;

public class User {
    
private String username;
    
private String password;

    
public String getPassword() {
        
return password;
    }


    
public String getUsername() {
        
return username;
    }


    
public void setPassword(String password) {
        
this.password = password;
    }


    
public void setUsername(String username) {
        
this.username = username;
    }

}

数据访问接口UserDAO.java
package com.bebig.dao;

import com.bebig.model.User;

//Data Access Object数据访问接口
public interface UserDAO {
    
public void save(User u);
}

数据访问接口的实现UserDAOImpl.java
package com.bebig.dao.impl;

import com.bebig.dao.UserDAO;
import com.bebig.model.User;
//数据访问接口的实现
public class UserDAOImpl implements UserDAO {

    @Override
    
public void save(User u) {
        System.out.println(
"a user saved!");
    }


}

逻辑业务层UserService.java
package com.bebig.service;

import com.bebig.dao.UserDAO;
import com.bebig.model.User;
//逻辑业务层
public class UserService {
    
private UserDAO userDAO;

    
public void add(User u) {
        userDAO.save(u);

    }


    
public void setUserDAO(UserDAO userDAO) {
        
this.userDAO = userDAO;
    }


    
public UserDAO getUserDAO() {
        
return userDAO;
    }

}

Spring Bean工厂接口BeanFactory.java
package com.bebig.spring;

public interface BeanFactory {
    
public Object getBean(String name);
}
Bean工厂实现方法ClassPathXmlApplicationContext.java
package com.bebig.spring;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
//用JDOM解析bean的配置文件
public class ClassPathXmlApplicationContext implements BeanFactory{
    
private Map<String,Object> beans = new HashMap<String,Object>();
    
    
public ClassPathXmlApplicationContext() throws Exception {
        SAXBuilder sb 
= new SAXBuilder();
        Document doc 
= sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")).getDocument();
        Element root 
= doc.getRootElement();
        List list 
= root.getChildren("bean");
        
for(int i=0;i<list.size();i++)
        
{
            Element element 
=(Element) list.get(i);
            String id 
= element.getAttributeValue("id");
            String clazz 
= element.getAttributeValue("class");
            System.out.println(id 
+ ":" +clazz);
            Object o 
= Class.forName(clazz).newInstance();
            beans.put(id, o);
            
            
for(Element propertyElement : (List<Element>) element.getChildren("property"))
            
{
              String name 
= propertyElement.getAttributeValue("name");
              String bean 
= propertyElement.getAttributeValue("bean");
              Object beanObject 
= beans.get(bean);
              
              String methodName 
= "set" + name.substring(01).toUpperCase() + name.substring(1);
              System.out.println(
"method name = " + methodName);
              
              Method m 
= o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
              m.invoke(o, beanObject);
            }

        }

    }


    @Override
    
public Object getBean(String name) {
        
return beans.get(name);
    }

}

bean配置文件beans.xml
<beans>
    
<bean id="u" class="com.bebig.dao.impl.UserDAOImpl" />
     
<bean id="userService" class="com.bebig.service.UserService">
        
<property name="userDAO" bean="u" />
    
</bean> 
</beans>
测试用例:UserServiceTest.java
package com.bebig.service;

import org.junit.Test;

import com.bebig.model.User;
import com.bebig.spring.BeanFactory;
import com.bebig.spring.ClassPathXmlApplicationContext;

public class UserServiceTest {

    @Test
    
public void testAdd() throws Exception {
        BeanFactory factory 
= new ClassPathXmlApplicationContext();

        UserService service 
= (UserService) factory.getBean("userService");

        User u 
= new User();
        service.add(u);
    }


}

模拟了Spring的Bean工厂,通过反射获取相应配置实体类,并执行其方法。