Spring基本原理
1.目录结构

2.User.java
package com.cloud.spring.model; /** * @author cloud * @data 2016年5月13日 * @version 1.0 * @description:普通的JavaBean */ 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.UserDAO
package com.cloud.spring.dao; import com.cloud.spring.model.User; /** * @author cloud * @data 2016年5月13日 * @version 1.0 * @description:定义接口,定义规范,必须实现save方法 */ public interface UserDAO { public void save(User user); }
4.UserDAOImp
package com.cloud.spring.dao.imp; import com.cloud.spring.dao.UserDAO; import com.cloud.spring.model.User; /** * * @author cloud * @data 2016年5月13日 * @version 1.0 * @description:实现接口,重写方法 */ public class UserDAOImpl implements UserDAO { public void save(User user) { //Hibernate //JDBC //XML //NetWork System.out.println("user saved!"); } }
5.UserServic
package com.cloud.spring.service; import com.cloud.spring.dao.UserDAO; import com.cloud.spring.model.User; /** * * @author cloud * @data 2016年5月13日 * @version 1.0 * @description:真正的业务处理 */ public class UserService { private UserDAO userDAO; public void add(User user) { userDAO.save(user); } public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } }
6.BeanFactory
package com.cloud.spring; /** * * @author cloud * @data 2016年5月13日 * @version 1.0 * @description:定义接口规范,必须重写其中的方法 */ public interface BeanFactory { public Object getBean(String id); }
7.ClassPathXmlApplicationContext
package com.cloud.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; import com.cloud.spring.model.User; import com.cloud.spring.service.UserService; /** * * @author cloud * @data 2016年5月13日 * @version 1.0 * @description: * 1.将配置文件中的对象装载到容器中去,放置在HashMap中。加载类的时候就要进行,因此放置在构造函数中去 * 2.解析XML文件 */ public class ClassPathXmlApplicationContext implements BeanFactory { private Map<String , Object> beans = new HashMap<String, Object>(); //IOC Inverse of Control DI Dependency Injection public ClassPathXmlApplicationContext() throws Exception { SAXBuilder sb=new SAXBuilder(); //1.加载xml文件----------------bean.xml //2.获取根元素父标签--------------<beans> //3.获取儿子标签,此处有两个儿子------<bean> //4.迭代获取每个儿子--------------<bean> //5.获取属性名是id的内容-----------u,userService //6.获取属性名是class的内容--------com.XXX.XXX.... //7.使用反射机制获取类的一个示例,(id,object)放置在容器中去,因此在xml配置文件中必须不能有重复的id //-------(u,UserDAOImp),(userService,UserService) //8.如果儿子中有property属性,那么就需要进行注入操作,如果有多个个property就需要迭代进行注入操作 //9.获取name的被注入的对象,获取需要注入的bean的id-----------userDAO(set方法),u //10.根据bean的id从容器中获取bean----------------------UserDAOImp //11.根据name属性获取需要注入的对象名称,获取其set方法---------setUserDAO //12.使用反射机制调用userServcice.setMethod方法,将对象userDAOImp设置进去 Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象 Element root=doc.getRootElement(); //获取根元素HD List list=root.getChildren("bean");//取名字为disk的所有元素 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 : (List<Element>)element.getChildren("property")) { String name = propertyElement.getAttributeValue("name"); //userDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl instance 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]); m.invoke(o, beanObject); } } } public Object getBean(String id) { return beans.get(id); } public static void main(String[] args) { try { UserService service = (UserService) new ClassPathXmlApplicationContext().getBean("userService"); User user = new User(); service.add(user); } catch (Exception e) { e.printStackTrace(); } } }
8.beans.xml
<beans> <!-- UserService 中有个实例域UserDAO,需要将UserDAOImp的一个实例注入到UserDAO中去 --> <bean id="u" class="com.cloud.spring.dao.imp.UserDAOImpl" /> <bean id="userService" class="com.cloud.spring.service.UserService" > <property name="userDAO" bean="u"/> </bean> </beans>
    http://www.cnblogs.com/makexu/

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号