废话不多说,直接上代码
一.写一个实体类
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{ 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{ }
四.公共Service:BaseService(这里写一些公共方法和一个抽象方法,抽象方法为了获取BaseService的具体实现)
package generic;public abstract class BaseService{ public abstract BaseDao 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{ @Autowired private UserDao userDao; @Override public BaseDao getBaseDao() { return userDao; }}
其中第四步和第五步是以前的写法,Spring4的新泻法如下:
新四:
package generic;import org.springframework.beans.factory.annotation.Autowired;public abstract class BaseService{ @Autowired private BaseDao baseDao; public void save(T t){ baseDao.save(t); }}
新五:
package generic;import org.springframework.stereotype.Service;@Service("userService")public class UserService extends BaseService{ }
大家可以看到现在的代码非常简洁,在步骤新四中,注入的时候spring会去自动去找BaseDao<User>的子类实现并注入