总结Spring使用技巧如下:
技巧1:使用ApplicationContextAware得到一个ApplicationContext对象
Spring容器利用IOC机制初始化创建了对象Bean的实例集合BeanFactory,我们在程序中经常要访问这些Bean实例,一般通过BeanFactory的子类ApplicationContext,最常用的办法就是用ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以,但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余。我们推荐使用的方法是,利用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext,这样我们就可以在程序中引用到自己需要的Bean了。具体方法如下:
1.建立一个实现ApplicationContextAware接口的类
public class ApplicationContextAccessor implements ApplicationContextAware {
|
2.在spring配置文件中加入如下配置
<bean id="applicationContextAccessor " class="test.ApplicationContextAccessor " /> |
3.在代码中直接引用需要的Bean,方法如下
BeanExample beanExample= (BeanExample )ApplicationContextAccessor.getBean( "beanExample" ); |
这样我们就可以取得了一个Spring配置的对象, 然后我们就可以自由自在的在程序中享受Spring提供的功能。
技巧2:事务的配置
注意点:编码的注解方式会影响以下事务控制AOP的执行,如会使事务不会正常回滚。加注解会优先运行产生代码,然后再执行AOP拦截,这样产生的结果就不会正常的执行事务控制了。去掉注解,才会正常执行,这个问题应当注意。找了许多原因才发现的。
方式1:一般AOP方式:
<beans xmlns="http://www.springframework.org/schema/beans" <!-- 配置DataSource数据源 --> <!-- 配置SqlSessionFactoryBean --> <!-- 事务配置 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 分页拦截器 --> <!-- 自动扫描mapper的配置 --> |
方式2:AOP自动代理事务拦截方式:
说明:使用这种方式的原因是,由于项目中采用的mybatis,持久层Mapper调用与“方式1”的AOP方式有冲突,导致事务遇到runtimeException也不能正常回滚,采用这种方式就可以避免这种错误发生,其中bean还不能使用注解方式,要显示的配置spring-bean,才能生效,配置实例如下:
<bean name="transactionIterceptor" ... <!-- 自动扫描mapper的配置 -->
|