gpt4 book ai didi

java - 带有抽象类问题的Spring 3 Service Dao层

转载 作者:行者123 更新时间:2023-11-30 06:34:29 27 4
gpt4 key购买 nike

我正在尝试在我的服务层中实现一个通用抽象类。我已经在我的 dao 层中使用了一个类似的模式,它工作正常。我在 Spring in Practice v8 电子书中找到了一个工作示例。我想知道是否有办法 Autowiring 以下工作代码。 (代码有效,但在我使用类中的任何其他方法之前,我必须调用我的辅助方法“setDao”)

测试类:

    public class App {


public static void main(String[] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");

MyService service = (MyService)appContext.getBean("myService");

service.setDao();

Heading detail = new Heading();
detail.setName("hello");

service.save(detail);

Heading dos = service.findById(Long.valueOf(1));
System.out.println(dos);
}
}

MyServiceImpl 类

    @Service("myService")
public class MyServiceImpl extends AbstractServiceImpl<Heading> implements HeadingService {

@Autowired
private HeadingDao headingDao;

public void setHeadingDao(HeadingDao headingDao) {
this.headingDao = headingDao;
}

public void setDao() {
super.setDao(this.headingDao);
}

}

我的服务接口(interface)

    public interface HeadingService extends AbstractService<Heading> {
public void setDao();
}

抽象服务类

    @Service
public abstract class AbstractServiceImpl<T extends Object> implements AbstractService<T> {

private AbstractDao<T> dao;

public void setDao(AbstractDao<T> dao) {
this.dao = dao;
}

public void save(T t) {
dao.save(t);
}

public T findById(Long id) {
return (T)dao.findById(id);
}

public List<T> findAll() {
return dao.findAll();
}

public void update(T t) {
dao.update(t);
}

public void delete(T t) {
dao.delete(t);
}

public long count() {
return dao.count();
}

}

抽象服务接口(interface)

    public interface AbstractService<T extends Object> {

public void save(T t);
public T findById(Long id);
public List<T> findAll();
public void update(T t);
public void delete(T t);
public long count();

}

最佳答案

与其必须调用一个方法 (setDao()) 来允许您的子类将 DAO 引用传递给您的父类(super class),为什么要反转方向并强制子类将 DAO 提供给父类(super class)?

例如:

public abstract class AbstractServiceImpl<T extends Object> implements AbstractService<T> {
private AbstractDao<T> dao;

abstract AbstractDao<T> getDao();

public void save(T t) {
getDao().save(t);
}
}

public class FooServiceImpl extends AbstractServiceImpl<Foo> {
@Autowired
private FooDao fooDao;

@Overrides
public AbstractDao<Foo> getDao() {
return fooDao;
}
}

无需调用外部方法来启动引用传递链。

关于java - 带有抽象类问题的Spring 3 Service Dao层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com