Heim  >  Artikel  >  Backend-Entwicklung  >  Simulieren Sie Federfunktionen

Simulieren Sie Federfunktionen

巴扎黑
巴扎黑Original
2016-12-20 15:26:331103Durchsuche

1. Erstellen Sie User.java mit folgendem Inhalt:

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. Erstellen Sie UserDao.java mit folgendem Inhalt:

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 folgender Inhalt:

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. Erstellen Sie UserService.java mit folgendem Inhalt:

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. Erstellen Sie BeanFactory.java mit folgendem Inhalt:

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. Erstellen Sie ClassPathXmlApplicationContext.java mit folgendem Inhalt:

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. Erstellen Sie Beans.xml mit folgendem Inhalt:

<?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>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:ASP.net und AJAXNächster Artikel:ASP.net und AJAX