1、建立user.java,内容如下:
package net.model;
/**
* @项目名:spring2.5
* @包名:net.model
* @文件名:user.java
* @日期:jun 22, 2011 4:31:22 pm
* @备注:
* @作者:apple
*/
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;
}
}
2、建立userdao.java,内容如下:
package net.dao;
import net.model.user;
/**
* @项目名:spring2.5
* @包名:net.dao
* @文件名:userdao.java
* @日期:jun 22, 2011 4:12:42 pm
* @备注:
* @作者:apple
*/
public interface userdao {
public void save(user u);
}
3、建立userdaoimpl.java,内容如下:
package net.dao.impl;
import net.dao.userdao;
import net.model.user;
/**
* @项目名:spring2.5
* @包名:net.dao.impl
* @文件名:userdaoimpl.java
* @日期:jun 22, 2011 4:13:45 pm
* @备注:
* @作者:apple
*/
public class userdaoimpl implements userdao {
public void save(user u) {
// todo auto-generated method stub
system.out.println("user save...");
}
}
4、建立userservice.java,内容如下:
package net.service;
import net.dao.userdao;
import net.dao.impl.userdaoimpl;
import net.model.user;
/**
* @项目名:spring2.5
* @包名:net.service
* @文件名:userservice.java
* @日期:jun 22, 2011 4:15:47 pm
* @备注:
* @作者:apple
*/
public class userservice {
private userdao userdao ;
public userdao getuserdao() {
return userdao;
}
public void setuserdao(userdao userdao) {
this.userdao = userdao;
}
public void add(user u){
userdao.save(u);
}//这里可以调用任务实现了userdao接口的save方法了。
}
5、建立beanfactory.java,内容如下:
package net.factory;
/**
* @项目名:spring2.5
* @包名:net.factory
* @文件名:beanfactory.java
* @日期:jun 22, 2011 4:37:08 pm
* @备注:
* @作者:apple
*/
public interface beanfactory {
public object getbean(string name);
}
6、建立classpathxmlapplicationcontext.java,内容如下:
package net.util;
import java.lang.reflect.method;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import net.dao.userdao;
import net.factory.beanfactory;
import net.model.user;
import net.service.userservice;
import org.jdom.document;
import org.jdom.element;
import org.jdom.input.saxbuilder;
/**
* @项目名:spring2.5
* @包名:net.util
* @文件名:classpathxmlapplicationcontext.java
* @日期:jun 22, 2011 4:19:35 pm
* @备注:
* @作者:apple
*/
public class classpathxmlapplicationcontext implements beanfactory{
private map<string,object> beans = new hashmap<string, object>();
public classpathxmlapplicationcontext() throws exception{
saxbuilder sb=new saxbuilder();//创建一个saxbuilder对象
document doc=sb.build(classpathxmlapplicationcontext.class.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");
system.out.println(id + ":" + clazz);
object o = class.forname(clazz).newinstance();
beans.put(id, o);
//* 以下for循环是实现模拟spring自动装配(注入)功能
//一开始列出此bean的所有property子元素
for (element propertyelement : (list<element>)element.getchildren("property")){
//获取property子元素中 属性为name的值(也就是需要注入的参数名称)
string name = propertyelement.getattributevalue("name");
//获取property子元素中 属性为bean的值 (需要注入参数的类型),此处的bean值是已经在上面初始化好了的bean的id了。
string bean = propertyelement.getattributevalue("bean");
//因此此处获取指定id的bean
object beanobject = beans.get(bean);
//组成set方法名称:set + 第一个字母大写 + 其它的字母
string methodname = "set" + name.substring(0,1).touppercase() + name.substring(1);
system.out.println("methodname = " + methodname);
//获取bean的set方法,参数(方法名,参数:此参数的类型)
method m = o.getclass().getmethod(methodname, beanobject.getclass().getinterfaces()[0]);
//使用反映机制,执行method方法,从而实现注入功能
m.invoke(o, beanobject);
}
}
}
public object getbean(string name){
return beans.get(name);
}
public static void main(string[] args){
beanfactory factory=null;
try {
factory = new classpathxmlapplicationcontext();
} catch (exception e) {
// todo auto-generated catch block
e.printstacktrace();
}
userservice service = (userservice)factory.getbean("userservice");
user u = new user();
service.add(u);
}
}
7、建立beans.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<beans>
<bean id="u" class="net.dao.impl.userdaoimpl">
</bean>
<bean id="userservice" class="net.service.userservice">
<property name="userdao" bean="u"/>
</bean>
</beans>