Spring小知识点

169 阅读3分钟
1.spring管理的事务如果dao层出现问题,在service层不能catch异常,如果catch了异常将导致spring不会进行回滚操作,这样一个service中的多个dao操作没有原子性

2.Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContext方法

3.@Autowired可以加在setter方法前面

4.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。

   使用Spring Cache需要我们做两方面的事:
    1、 配置Spring对Cache的支持(一种是基于一种是ConcurrentMap,另一种是Ehcache)
    2、给方法添加注解来才能使用缓存

5.CacheManager是Spring定义的一个用来管理Cache的接口。                                          Spring自身已经为我们提供了两种CacheManager的实现:                                                        一种是基于Java API的ConcurrentMap                                                                                  另一种是基于第三方Cache实现——Ehcache,如果我们需要使用其它类型的缓存时,我们可以自己来实现Spring的CacheManager接口或AbstractCacheManager抽象类。

6.Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。完成这两个动作有三种方式:                                                                                                                            自动配置的方式                                                                                                                      JavaConfig的方式                                                                                                                  XML配置的方式                                                                                                                  在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。                    在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么就很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。                    使用xml的方式,也是如此。<bean>标签就是告诉spring怎么获取这个bean,各种<ref>就是手动的配置bean之间的关系。
eg:
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
StringRedisTemplate template = new StringRedisTemplate(factory);
setSerializer(template);//设置序列化工具
template.afterPropertiesSet();
return template;
}