对于Service,由于功能跟Dao的差不多,所以我把主要调用方法的部分抽出来做成公共,而事务的话由于还没测试所以先去掉,接口代码就不附上了
AbstractBasicService:采用spring注解把basicDao注入,使用的所有Service类分别继承AbstractBasicService,把所引用的bean的class注入到AbstractBasicService中
public abstract class AbstractBasicService<T extends JavaBean, PK extends Serializable> implements BasicServiceIf<T, PK> { private BasicDaoIf<T, PK> basicDao; protected Class<T> javabeanclass; /** * 创建一个新的实例 AbstractBasicService. * * @param javabeanclass */ protected AbstractBasicService(Class<T> javabeanclass) { this.javabeanclass = javabeanclass; } /** * basicDao * * @return the basicDao * @since CodingExample Ver(编码范例查看) 1.0 */ public BasicDaoIf<T, PK> getBasicDao() { return basicDao; } /** * @param basicDao * the basicDao to set */ @Resource(name = "basicDao") public void setBasicDao(BasicDaoIf<T, PK> basicDao) { this.basicDao = basicDao; } @Override public List<T> findAll() { return basicDao.findAll(javabeanclass); } }
以上都是公共部分代码,测试代码,则放到src/test/java目录下,而spring的配置文件放在src/test/resources目录下,
spring的配置文件applicationContext.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="org.lxh" /> <tx:annotation-driven transaction-manager="hibernateTransactionManager" /> </beans>
@Configuration
public class BeanConfig {
private static PropertiesFactory factory = PropertiesFactory.getInstance();
@Bean(name = { "basicDao" })
public BasicDaoIf<JavaBean, Serializable> basicDao() {
return BasicDaoFactory.getBasicDao();
}
@Bean(name = { "dataSource" })
public BasicDataSource dataSource() {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName((String) factory
.getPropertyValueOrProperties("driverClassName"));
bds.setUrl((String) factory.getPropertyValueOrProperties("url"));
bds.setUsername((String) factory
.getPropertyValueOrProperties("username"));
bds.setPassword((String) factory
.getPropertyValueOrProperties("password"));
return bds;
}
@Bean(name = { "sessionFactory" })
public SessionFactory getSessionFactory() throws Exception {
AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
sessionFactoryBean.setDataSource(this.dataSource());
sessionFactoryBean.setHibernateProperties((Properties) factory
.getPropertyValueOrProperties(""));
String packagesToScan = (String) factory
.getPropertyValueOrProperties("packages");
String[] packages = packagesToScan.split(":");
if (null == packages) {
sessionFactoryBean
.setPackagesToScan(new String[] { packagesToScan });
} else {
sessionFactoryBean.setPackagesToScan(packages);
}
sessionFactoryBean.afterPropertiesSet();
return sessionFactoryBean.getObject();
}
@Bean(name = { "hibernateTemplate" })
public HibernateTemplate getHibernateTemplate() throws Exception {
HibernateTemplate hibernateTemplate = new HibernateTemplate();
hibernateTemplate.setSessionFactory(this.getSessionFactory());
return hibernateTemplate;
}
@Bean(name = { "hibernateTransactionManager" })
public HibernateTransactionManager getHibernateTransactionManager()
throws Exception {
HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager();
hibernateTransactionManager.setSessionFactory(this.getSessionFactory());
return hibernateTransactionManager;
}
}
public class PropertiesFactory {
private static final String FILE = "springApplicationContext.properties";
private static PropertiesFactory propertiesFactory = new PropertiesFactory();
private InputStream in;
private Properties p;
public static PropertiesFactory getInstance() {
return propertiesFactory;
}
/**
* 创建一个新的实例 PropertiesFactory.
*
*/
private PropertiesFactory() {
super();
}
public void init() {
in = this.getClass().getClassLoader().getResourceAsStream(FILE);
}
public Object getPropertyValueOrProperties(final String property) {
try {
init();
p = new Properties();
p.load(in);
if (StringUtils.isNotEmpty(property))
return p.getProperty(property);
else
return p;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
springApplicationContext.properties:
url:驱动地址
driverClassName:驱动名称
username:数据库名字
password:数据库密码
packages:spring要扫描的包以,多个以分割
# JDBC Config url=jdbc:mysql://localhost:3306/testUser driverClassName=com.mysql.jdbc.Driver username=root password=root #Hibernate Config hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=update hibernate.format_sql=true hibernate.show_sql=true #Spring Config packages=org.lxh.bean