Spring中的DAO支持提供了对JDBC, Hibernate, JPA等持久化技术的使用一致性的支持。可以在上述的持久化机制之间进行简单的切换,同时不需要过多关注捕捉各种技术所特有的异常。
统一的异常继承体系
Spring可以将特定的持久化技术的异常类型转换成其自定义的异常类型继承体系(root exception: org.springframework.dao.DataAccessException);这些自定义的异常包含了原始异常类型的全部信息。
部分异常类如下:
用于配置DAO / Repository 类的注解
确保自定义的Data Access Objects(DAOs)和Repository 类可以提供异常转换机制的方法是使用注解 - @Repository。
该注解支持组件扫描(Component Scanning)来发现并配置用户的DAOs或Repository(无需在XML配置文件中进行配置)。
例如:
@Repository
public class SomeMovieFinder implements MovieFinder {
// ...
}
任何DAO或Repository的实现都需要访问特定的持久化资源(persistence resource),具体的类型依赖与所使用的技术:
- JDBC-Based - 使用JDBC DataSource
- JPA-Based - 使用EntityManager
- Hibernate - 使用SessionFactory
最简单的方法是使用注解:@Autowired, @Inject, @Resource, @PersistenceContext 来进行资源的依赖注入。
例 - JPA Repository
@Repository
public class JpaMovieFinder implements MovieFinder {
@PersistenceContext
private EntityManager entityManager;
// ...
}
例 - Hibernate API
@Repository
public class HibernateMovieFinder implements MovieFinder {
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// ...
}
例 - JDBC
@Repository
public class JdbcMovieFinder implements MovieFinder {
private JdbcTemplate jdbcTemplate;
@Autowired
public void init(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// ...
}
注: 每种持久化技术在Spring中的使用参考具体的章节。