1. 参考资料
2. 选型
有人说guice好,但我们用Spring不仅是为了IOC,也为了Spring对JEE所做的封装,以及整个JavaEE界众多项目(SpringSecurity,CXF、Struts2等)对它的依赖。
3. in SpringSide 3 - Mini示例使用的基本特性
- 属性配置及IOC容器
- @Transcational annotation标注的事务管理功能
- 集成测试的基类
3.1 IOC部分特征使用
详见Spring 笔记(江南白衣博物馆)
3.1.1 零配置文件的使用场合
Service,Dao 层在无特殊配置项时,可使用IOC Annotation进行配置 实现约定俗成大于配置的零配置文件.
而其他Database/SessionFactory ,SpringSecurity, CXF等需要进行参数配置时,仍然使用 XML 配置文件。
3.1.2 零配置文件的annotation
SpringSide3中使用@Component注释所有类别,在setter方法(不需要严格按setter命名)上 使用@Autowired 进行byType注入,如果需要byName注入则使用@Resource。
3.1.3 其他特征
使用@Required注释没有用@Autowired注释的属性,保证对象必然被注入,如果对象没有被注入则报错。
使用JSR250的@PostConstruct来定义在执行完所有setter注入后必须执行的函数。@PreDestroy来定义JDK关闭时通过shutdownhook调用的函数。
ApplcationContext中默认设置Lazyload 与Autowired by type 仍然是必然的选择。
3.1.4 属性文件管理
在配置文件中,很有一些属性会在团队的开发环境,个人的开发环境,集成测试环境,以及生产环境集群的每台服务器中都有所不同的。详见Spring 笔记(江南白衣博物馆)
3.2 事务管理
在Service层用@Transactional 定义事务,详见Spring 笔记(江南白衣博物馆)。 注意Spring3.0 的@Transactional终于支持多个TransactionManager了, showcase里演示了多个数据源(不要求联合事务JTA)导致多个TransactionManager的情况。此时@Transactional默认使用<tx>中指定的TransactionManager, 但也可以重新指定,如@Transactional("transactionManager"). 但这种HardCode的transactonMananger名称还是越少越好了,如果第2个数据源其实是只读的,那就不要给它配置事务。
在AOP不到的地方,仍然有机会使用TransactionTemplate,(见Showcase的UserJdbcDao 与 LogJdbcWriter。)
3.3 集成测试的基类
详见 测试文档
4. in SpringSide3
4.1 Showcase中使用的Spring功能索引
- JMX:JMX的Server端封装
- JMS:JMS Template封装
- Email:EMail客户端封装
- Schedule:Quartz的封装,ScheduleExecutor的封装
- Ehcache:Ehcache Server封装
- Jdbc:Spring JdbcTemplate
4.2 SpringContextHolder
在Spring ApplicationContext启动时,先把Context放入个该类的静态变量,当模块的代码无法通过正常渠道获得Spring Context及其中的Bean时,可直接从该静态变量中获取。
4.3 AOP Aspect的写法
最新的写法,一切都写在java文件里,只要在applicationContext.xml里面定义一把scan就可以了。
<aop:aspectj-autoproxy proxy-target-class="true" />
详见showcase中的TraceLogAspect。
posted on 2010-12-21 17:10
hello 阅读(363)
评论(0) 编辑 收藏 所属分类:
springside