廢話不多說,直接上代碼
一.寫一個實體類
package generic; import java.io.Serializable; public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
二.公共DAO:BaseDao(crud都寫在這里)
package generic; public abstract class BaseDao<T> { public void save(T t){ System.out.println("....."); } public void delete(){ System.out.println("...."); } }
三.DAO的具體實現:UserDa繼承BaseDao
package generic; import org.springframework.stereotype.Repository; @Repository("userDao") public class UserDao extends BaseDao<User>{ }
四.公共Service:BaseService(這里寫一些公共方法和一個抽象方法,抽象方法為了獲取BaseService的具體實現)
package generic; public abstract class BaseService<T> { public abstract BaseDao<T> getBaseDao(); public void save(T t){ getBaseDao().save(t); } }
五.寫BaseService的具體實現:UserService並繼承BaseService
package generic; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("userService") public class UserService extends BaseService<User>{ @Autowired private UserDao userDao; @Override public BaseDao<User> getBaseDao() { return userDao; } }
其中第四步和第五步是以前的寫法,Spring4的新瀉法如下:
新四:
package generic; import org.springframework.beans.factory.annotation.Autowired; public abstract class BaseService<T> { @Autowired private BaseDao<T> baseDao; public void save(T t){ baseDao.save(t); } }
新五:
package generic; import org.springframework.stereotype.Service; @Service("userService") public class UserService extends BaseService<User>{ }
大家可以看到現在的代碼非常簡潔,在步驟新四中,注入的時候spring會去自動去找BaseDao<User>的子類實現並注入