01_2_模拟spring装载bean

01_2_模拟spring装载bean

1. xml配置文件内容

beans.xml

<beans>

<bean id="u" class="com.wysj.dao.impl.UserDAOImpl"></bean>

<bean id="userService" class="com.wysj.service.UserService">

<property name="userDAO" bean="u"></property> 

</bean>

</beans>

2. 实体类

User.java

package com.wysj.model;

 

public class User {

 

private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

 

 

}

3. dao及其实现

UserDAO.java

package com.wysj.dao;

 

import com.wysj.model.User;

 

public interface UserDAO {

 

public void save(User u);

}

UserDAOImpl.java

package com.wysj.dao.impl;

 

import com.wysj.dao.UserDAO;

import com.wysj.model.User;

 

public class UserDAOImpl implements UserDAO{

 

@Override

public void save(User u) {

System.out.println("user saved!");

}

 

}

4. 业务逻辑类

UserService.java

package com.wysj.service;

 

import com.wysj.dao.UserDAO;

import com.wysj.dao.impl.UserDAOImpl;

import com.wysj.model.User;

 

public class UserService {

 

private UserDAO userDAO;

public void add(User u) {

this.userDAO.save(u);

}

public UserDAO getUserDAO() {

return userDAO;

}

public void setUserDAO(UserDAO userDAO) {

this.userDAO = userDAO;

}

 

 

}

5. spring读取bean工厂及其实现类

BeanFactory.java

package com.wysj.spring;

 

public interface BeanFactory {

 

public Object getBean(String  name);

}

ClassPathXmlApplicationContext.java

package com.wysj.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;

 

public class ClassPathXmlApplicationContext implements BeanFactory{

 

private static final int Element = 0;

private Map<String, Object> beans = new HashMap<String, Object>();

 

@Override

public Object getBean(String name) {

// TODO Auto-generated method stub

return beans.get(name);

}

 

public ClassPathXmlApplicationContext() throws Exception {

SAXBuilder sb = new SAXBuilder();

Document doc = sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream("beans.xml"));

Element root = doc.getRootElement();

List list = root.getChildren("bean");

for (int i = 0; i < list.size(); i++) {

Element e = (Element) list.get(i);

String id = e.getAttributeValue("id");

String clazz = e.getAttributeValue("class");

System.out.println(id + ":" + clazz);

Object o = Class.forName(clazz).newInstance();

beans.put(id, o);

 

for(Element propertyElement : (List<Element>)e.getChildren("property")) {

String name = propertyElement.getAttributeValue("name");//userDAO

String bean = propertyElement.getAttributeValue("bean"); //u

Object beanObject = beans.get(bean);

 

String methodName = "set" + name.substring(0, 1).toUpperCase()+name.substring(1);

System.out.println("method name = " + methodName);

Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);//setUserDAO

m.invoke(o, beanObject);

}

}

}

}
原文地址:https://www.cnblogs.com/flyback/p/8784186.html