BaseRepository
public abstract class BaseRepository
System.out.println(\ } }
@Repository
public class UserRepository extends BaseRepository
@Repository public class OrganizationRepository extends BaseRepository
对于Repository,我们一般是这样实现的:首先写一个模板父类,把通用的crud等代码放在BaseRepository;然后子类继承后,只需要添加额外的实现。
1.3、Service
1.3.1、以前Service写法
Java代码
public abstract class BaseService
public void setRepository(BaseRepository
public void save(M m) { repository.save(m); } }
@Service
public class UserService extends BaseService
public void setUserRepository(UserRepository userRepository) { setRepository(userRepository); } }
@Service
public class OrganizationService extends BaseService
@Autowired
public void setOrganizationRepository(OrganizationRepository
organizationRepository) {
setRepository(organizationRepository); } }
public abstract class BaseService
public void setRepository(BaseRepository
public void save(M m) { repository.save(m); } }
@Service
public class UserService extends BaseService
public void setUserRepository(UserRepository userRepository) { setRepository(userRepository); } }
@Service
public class OrganizationService extends BaseService
@Autowired
public void setOrganizationRepository(OrganizationRepository organizationRepository) {
setRepository(organizationRepository); } }
可以看到,以前必须再写一个setter方法,然后指定注入的具体类型,然后进行注入;
1.3.2、泛型Service的写法
Java代码
public abstract class BaseService
protected BaseRepository
public void save(M m) { repository.save(m); } }
@Service
public class UserService extends BaseService
@Service
public class OrganizationService extends BaseService
public abstract class BaseService
protected BaseRepository
public void save(M m) { repository.save(m); } }
@Service
public class UserService extends BaseService
@Service
public class OrganizationService extends BaseService
大家可以看到,现在的写法非常简洁。支持泛型式依赖注入。
这个也是我之前非常想要的一个功能,这样对于那些基本的CRUD式代码,可以简化更多的代码。
如果大家用过Spring data jpa的话,以后注入的话也可以使用泛型限定式依赖注入 : Java代码 @Autowired
private Repository
private Repository
对于泛型依赖注入,最好使用setter注入,这样万一子类想变,比较容易切换。比如https://github.com/zhangkaitao/es,如果有多个实现时,子类可以使用@Qualifier指定使用哪一个。
相关推荐: