Java 服务端架构
Spring、Netty、日志框架与工程化实战
🎨 视觉封面SpringMVC3.1+Hibernate4.1.7完全基于注解配置(零配置文件)
其实这篇文章应该是上篇《Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件》的续篇,因为上篇只介绍到web工程和Spring(包括MVC)的零配置,相对于传统的SSH来说,相当于SS零配置了。那么S和H的结合如果零配置文件呢。
Hibernate的注解配置大家应该不会陌生。主要就是对实体类的配置,注明对应的表和字段即可。
/**
* 用户模型
*
* @author lihzh
* @alia OneCoder
* @blog http://www.coderli.com
*/
@Entity
@Table(name="snm_user")
public class User implements Serializable {
private static final long serialVersionUID = -6925982814013703984L;
@Id
private int id;
@Column(length = 20, nullable = false)
private String name;
@Column(length = 32, nullable = false)
private String password;
@Column(length = 64, nullable = false)
private String email;
@Column(name = "ctime", length = 20, nullable = false)
private long createTime;
....
主要还是原有数据源和SessionFactory的注解配置方式的改变。这里利用Spring提供的注解方式,单独抽出一个数据源配置类
/**
* 数据源配置类
*
* @author lihzh
* @alia OneCoder
* @blog http://www.coderli.com
*/
@Configuration
@PropertySource("/conf/jdbc.properties")
public class DataSourceConfig {
@Value("${jdbc.driverClass}") String driverClass;
@Value("${jdbc.url}") String url;
@Value("${jdbc.user}") String user;
@Value("${jdbc.password}") String password;
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driverClass);
dataSource.setJdbcUrl(url);
dataSource.setUser(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() throws PropertyVetoException {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
sessionFactoryBean.setHibernateProperties(hibernateProperties);
sessionFactoryBean.setPackagesToScan("com.coderli.shurnim.*.model");
return sessionFactoryBean;
}
@Bean
public HibernateTransactionManager txManager() throws PropertyVetoException {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
}
配置了数据源,SessionFactory和事物管理类。在SessionFactory中声明了扫描实体注解的包路径。这里把数据源的配置单独提到了jdbc.properties这个配置文件中,主要是考虑在实际实施过程中,数据库链接是一个需要经常修改的项,所以提出在项目配置之外,以方便实施人员独立配置。
然后在原有的DefaultAppConfig中引用该配置。用@Import注解:
@Configuration
@ComponentScan(basePackages = "com.coderli.shurnim.*.biz")
@Import(DataSourceConfig.class)
@EnableTransactionManagement
public class DefaultAppConfig {
同时启用了事物注解。至此,Spring3.1+Hibernate4.1.7的配置基本完成了。启动项目。稍微修改一下原UserAction,使其读取数据库
@RequestMapping("/user.do")
@Transactional
public void test(HttpServletResponse response) throws IOException {
_log.info("Hi, u guy");
List<User> users = userDAO.getAll();
response.getWriter().write("name: " + users.get(0).getName() + "; email: " + users.get(0).getEmail());
}

启动服务,一切OK。
需要说明的是,OneCoder的学习习惯是不停的折腾,所以这里虽然是配置好了,正常使用。但是在配置过程中,还是遇到一些没有解决的问题。比如,根据@Configuration的注解说明,OneCoder曾响在DataSourceConfig中仅仅保留数据源配置,将SessionFactory和事物的配置都放到AppConfig中,然后通过@Autowire或者@Inject的注解引用进来,用了两种方式都还没有成功。待OneCoder研究清楚后,再一一说明。这里给出配置,仅仅给大家提供一个样例参考。更多的细节,还需要大家自己研究:)。OneCoder感觉,这种配置方式,还有挺有意思的。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
Java 利用ASM读取变量值(Field value)问题研究
最近在学习Spring源码的过程中,遇到了spring-asm工程的重新打包的问题,于是突然就想研究一下asm这个开源字节码操作工具。秉承我的一贯风格,想到啥就立马学啥。 对于开源产品,我的一贯风格就是通过其官方提供的源码版本管理地址(svn/git等),直接下载最新代码,构建Java工程,直接通过工程依赖的方式研究学...
SpringFramework3 源码下载和编译教程
Spring已经将源码从svn迁移到了git。所以,首先需要安装git环境。我使用的是Windows下的TortoiseGit,带图形界面,比较直观。 SpringFramework的GitHub地址:https://github.com/SpringSource/spring-framework Git clone地...
Spring研究-容器初始化之FileSystemXmlApplicationContext构造函数
宅男Coder,没有其他爱好,闲暇之余抱着瞻仰的心态去阅读一下Spring的源码,期许能收获一支半解。要学习Spring的源码,第一步自然是下载和编译Spring的源码,这个我在之前的博文中已经发表过了。具体可参考:<a href="http://www.coderli.com/springframework-sour...
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com