论坛首页 Java企业应用论坛

spring3.0使用annotation完全代替XML

浏览 24421 次
精华帖 (0) :: 良好帖 (13) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-19  

现在的项目里用的就是spring3+jpa的注解,用起来很方便,只有事务我用的是xml配置。

dao层:

@Repository
public class UserDaoImpl extends BasicDaoImpl<User, Serializable>

 service层:

@Service
public class UserServiceImpl implements UserService {
	@Inject
	private Dao<User, Serializable> userDaoImpl;

	public Dao<User, Serializable> getUserDaoImpl() {
		return userDaoImpl;
	}

	public void setUserDaoImpl(Dao<User, Serializable> userDaoImpl) {
		this.userDaoImpl = userDaoImpl;
	}

 

但是也会伴随着一些问题..比如OpenSessionView的那个拦截器我就不知道怎么在注解的情况下配置...

0 请登录后投票
   发表时间:2010-08-19  
zzy9zzy 写道
还是用xml配置文件好些。annotation配置出了问题还要去翻代码,不符合配置文件和代码分离的本意。


同此想法
如果想改xml中的参数 肯定要改代码 一想到改代码 会疯掉
0 请登录后投票
   发表时间:2010-08-19  
septem 写道
@Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation。


楼主,我问下,spring和hibernate结合时,hibernate实体类使用xml方式标注可以通过<prop key="hibernate.hbm2ddl.auto">create</prop>这种方式自动创建表结果,如果换成用注解的话可不可以实现相同功能?!!!?
  • 大小: 76.3 KB
0 请登录后投票
   发表时间:2010-08-19   最后修改:2010-08-19
qljcly 写道

楼主,我问下,spring和hibernate结合时,hibernate实体类使用xml方式标注可以通过<prop key="hibernate.hbm2ddl.auto">create</prop>这种方式自动创建表结果,如果换成用注解的话可不可以实现相同功能?!!!?


也是能实现的,只要在AppConfig里面提供dataSource和sessionFactory
比如以下的XML配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="jdbc:hsqldb:mem:mymemdb"/>
		<property name="url" value="org.hsqldb.jdbcDriver"/>
		<property name="username" value="sa"/>
		<property name="password" value=""/>
	</bean>

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="packagesToScan">
		    <list>
		        <value>septem.model</value>
		    </list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
				<prop key="hibernate.hbm2ddl.auto">create</prop>
			</props>
		</property>
	</bean>


换成代码就是:
@Configuration
public class AppConfig {
    @Bean
    public GreetingDao greetingDao() {
        return new GreetingDao();
    }
    
    @Bean
    public ChildBean childBean(){
    	return new ChildBean();
    }
    
    @Bean(destroyMethod = "close")
    public BasicDataSource dataSource(){
    	BasicDataSource dataSource = new BasicDataSource();
    	dataSource.setUrl("jdbc:hsqldb:mem:mymemdb");
    	dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
    	dataSource.setUsername("sa");
    	dataSource.setPassword("");
    	return dataSource;
    }
    
    @Bean
    public AnnotationSessionFactoryBean sessionFactory(){
    	AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
    	sessionFactory.setDataSource(dataSource());
    	sessionFactory.setPackagesToScan(new String[]{"septem.model"});
    	sessionFactory.setHibernateProperties(hibernateProperties());
    	return sessionFactory;
    }
    
    private Properties hibernateProperties(){
    	Properties p = new Properties();
    	p.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
    	p.setProperty("hibernate.hbm2ddl.auto", "create");
    	return p;
    }


当然你也可以将数据库的连接等信息保存在properties文件里面
0 请登录后投票
   发表时间:2010-08-19  
IcedCoffee 写道

但是也会伴随着一些问题..比如OpenSessionView的那个拦截器我就不知道怎么在注解的情况下配置...

理论上讲XML里面的Bean都可以移到AppConfig里面,不过我之前用的都是OpenSessionInViewFilter,直接配置在web.xml里面,OpenSessionInViewInterceptor倒是没用过

0 请登录后投票
   发表时间:2010-08-19  
多谢楼主,关键是@Configuration这个,之前我一直用的2.5,换成3.0就有这个注解了
0 请登录后投票
   发表时间:2010-08-19  
学习了,不过感觉XML还是不能扔的,我现在工作使用的是Spring2.5,平时像数据源、事务管理器之类的程序全局和框架性的东西使用XML来配置,自己写的DAO、Service等使用自动扫描,感觉不错
0 请登录后投票
   发表时间:2010-08-20  
xml的可维护性明显更强, 只是开发效率差点。
0 请登录后投票
   发表时间:2010-08-20  
我觉得这是一种倒退
0 请登录后投票
   发表时间:2010-08-20  
这和什么东西都写在代码里有何区别?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics