Project layering:
1. The most earthy method is to write directly to main
2. To separate the model layer
2. The following
4. Abstract a layer of access to the database (cross-database implementation)
For abstract programming
User.java
Package Com.bjsxt.model; Public classUser {PrivateString username; PrivateString password; PublicString GetUserName () {returnusername; } Public voidSetusername (String username) { This. Username =username; } PublicString GetPassword () {returnpassword; } Public voidSetPassword (String password) { This. Password =password; }}
Userservice.java
Package com.bjsxt.service;import Com.bjsxt.dao.userdao;import com.bjsxt.model.User; Public classUserService {PrivateUserdao Userdao; Public voidAdd (user user) {userdao.save (user); } PublicUserdao Getuserdao () {returnUserdao; } Public voidSetuserdao (Userdao Userdao) { This. Userdao =Userdao; }}
Userdaoimpl
Package com.bjsxt.dao.impl;import Com.bjsxt.dao.userdao;import com.bjsxt.model.User; Public classUserdaoimpl implements Userdao { Public voidSave (User user) {//Hibernate//JDBC//XML//NetWorkSystem. out. println ("User saved!"); }}
Beanfactory
Package com.bjsxt.spring; Public Interface beanfactory { public Object getbean (String ID);}
Classpathxmlapplicationcontext.java
Package Com.bjsxt.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 classClasspathxmlapplicationcontext implements Beanfactory {Privatemap<string, object> beans =NewHashmap<string, object>(); //IOC inverse of Control DI Dependency injection PublicClasspathxmlapplicationcontext () throws Exception {Saxbuilder sb=NewSaxbuilder (); Document Doc=sb.build ( This. GetClass (). getClassLoader (). getResourceAsStream ("Beans.xml"));//Constructing Document ObjectsElement root=doc.getrootelement ();//get root element HDList List=root.getchildren ("Bean");//take all the elements named disk for(intI=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");//UserdaoString Bean = Propertyelement.getattributevalue ("Bean");//uObject beanobject = beans.Get(bean);//Userdaoimpl InstanceString 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); } } } PublicObject Getbean (String id) {returnBeans.Get(ID); }}
Beans.xml
<beans> <bean id="u" class="Com.bjsxt.dao.impl.UserDAOImpl"/> <bean id="UserService" class="Com.bjsxt.service.UserService"> <property name="Userdao"bean="u"/>//refers to the Set method</bean> </beans>
Testadd
@Test Public voidTestadd () throws Exception {beanfactory ApplicationContext=NewClasspathxmlapplicationcontext (); UserService Service= (UserService) Applicationcontext.getbean ("UserService"); The analog spring Auto-help assembles the//userservice service = new UserService ();
Userdao Userdao = new Userdaoimpl (); Easy programming, low coupling User u=NewUser (); U.setusername ("Zhangsan"); U.setpassword ("Zhangsan"); Service.add (U); }
Spring re-contact simulation spring