spring3.0使用annotation完全代替XML
@Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation。
从spring2.5开始,annotation结合BeanPostProcessor成了扩展Spring IoC容器的常用方法。Spring2.5增加了对JSR-250中@Resource, @PostConstruct, @PreDestroy的支持,Spring 3.0又增加了对JSR-330 (Dependency Injection for Java)中 @Inject,@Qualifier, @Named, @Provider的支持。将相关的jsr jar包丢到classpath,并注册相应的BeanPostProcessor,其它的一切spring会帮你完成。spring还提供了一个简便的方法,通过在context的XML配置文件中加入:
换成代码就是:@Configurationpublic 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文件里面 14 楼 septem 2010-08-19 <div class="quote_title">IcedCoffee 写道</div>
<div class="quote_div">
<p>但是也会伴随着一些问题..比如OpenSessionView的那个拦截器我就不知道怎么在注解的情况下配置...</p>
</div>
<p>理论上讲XML里面的Bean都可以移到AppConfig里面,不过我之前用的都是OpenSessionInViewFilter,直接配置在web.xml里面,OpenSessionInViewInterceptor倒是没用过</p> 15 楼 qljcly 2010-08-19 多谢楼主,关键是@Configuration这个,之前我一直用的2.5,换成3.0就有这个注解了 16 楼 sam_chi 2010-08-19 学习了,不过感觉XML还是不能扔的,我现在工作使用的是Spring2.5,平时像数据源、事务管理器之类的程序全局和框架性的东西使用XML来配置,自己写的DAO、Service等使用自动扫描,感觉不错 17 楼 slaser 2010-08-20 xml的可维护性明显更强, 只是开发效率差点。 18 楼 huhuanqadn 2010-08-20 我觉得这是一种倒退 19 楼 nakupanda 2010-08-20 这和什么东西都写在代码里有何区别? 20 楼 caoyangx 2010-08-20 用惯了注解方式,再用xml只有忆苦思甜的感觉。 21 楼 gylixyu 2010-08-20 合理应用annotation,但是不能完全依赖 22 楼 liupesnap 2010-08-20 用注解岂不是等同于硬编码了? 但有时候确实方便 尴尬。。。 23 楼 Jazag.van 2010-08-20 用注解就要整个的用上约定大于配置的思想
不然到时候维护起来会搞死人。 24 楼 水痕2000 2010-08-20 约定大于配置
注解只能简单
一旦复杂的话
开发的人爽了
修改的人苦了 25 楼 ronry 2010-08-22 一看作者的标题就...怎么可能完全取代annotation呢..... 26 楼 zzy9zzy 2010-08-24 使用annotation确实比xml写着方便,但是修改的话要改代码,改代码就要走测试流程,这是不太可以接受的。用annotation就是为了省事儿,但是反而增加了工作量,得不偿失。xml一般也是复制粘贴的用法多些,不需要很大工作量,甚至可以更偷懒的直接声明为自动装配——不过不推荐这么做,有问题的 27 楼 kkfbai 2010-08-25 Spring注解配置的确是很好的配置方式,但缺点也很明显,需要与源代码绑定。使用注解还是XML配置,看具体的情况。个人认为,对于经常变动的部分用XML好些,能与源码解耦,更加的灵活。对于固定的部分,采用注解的方式,减少对XML配置的管理 28 楼 chrislee1982 2011-03-18 配置声明式事物就不要使用Annotation方式了,超麻烦的