模拟IoC
1.导入jdom架包获取xml文件内容。
2.创建dao(数据访问层),daoimpl(实现dao接口),model(实体层),Service(业务逻辑层)。
2.1 daoImpl实现了dao接口的save方法。
2.2 Service中创建UserDAO属性,设置了add方法。
3.模拟Spring
3.1配置xml文件
<beans>
<bean id="u" class="com.login.dao.impl.UserDAOImpl">
</bean>
<bean id="userService" class="com.login.Service.UserService">
<property name="userDAO" bean="u"></property>
</bean>
</beans>
3.2获取配置文件内容
3.2.1 创建BeanFactory接口
public interface BeanFactory {
public Object getBean(String id);
}
3.2.2 创建
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"));//创建文件对象
Element root = doc.getRootElement();//获取根元素
List list = root.getChildren("bean");//取名为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");
Object o = Class.forName(clazz).newInstance();
System.out.println(id);
System.out.println(clazz);
beans.put(id, o);
for(Element propertyElement:element.getChildren("property")){
String name = propertyElement.getAttributeValue("name");
String bean = propertyElement.getAttributeValue("bean");
Object beanObject = beans.get(bean);
String methodName = "set"+name.substring(0, 1).toUpperCase()+name.substring(1);
System.out.println("methodName:"+methodName);
Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
m.invoke(o, beanObject);
}
}
}
@Override
public Object getBean(String id) {
// TODO Auto-generated method stub
return beans.get(id);
}
}
Test
@Test
public void testAdd() throws Exception {
BeanFactory factory = new ClassPathXmlApplicationContext();
UserService service = (UserService) factory.getBean("userService");
service.setUserDAO(useDao);
User u = new User();
service.add(u);
}