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