spring.xml配置文件中配置注解:

开启注解(及自动扫描包中bean):

1:<context:component-scan base-package="com.bzu" />    在base-packge指定所需要扫描的包,建议指定一个包含整个架构的包,可以扫描到各层所定义的bean;

或2:<context:annotation-config />   2种方法选一;

 

引入外部properties文件,常为数据库连接配置文件;

1:<bean id="propertyConfigurer"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>

或2 :<context:property-placeholder location="classpath:redis.properties" />

 

@Component:只需要在对应的类上加上一个@Component注解,就将该类定义为一个Bean(可以在xml中去掉bean定义的配置):

使用@Component注解定义的Bean,默认的名称(id)是小写开头的非限定类名。如这里定义的Bean名称就是userDaoImpl。你也可以指定Bean的名称:

@Component("userDao")
@Component是所有受Spring管理组件的通用形式,Spring还提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。目前版本(2.5)中,这些注解与@Component的语义是一样的,完全通用,在Spring以后的版本中可能会给它们追加更多的语义。所以,我们推荐使用@Repository、@Service、@Controller来替代@Component。

 

通过@Autowired或@Resource来实现在Bean中自动注入的功能

在java代码中使用@Autowired或@Resource注解方式进行装配 ,这两个注解的区别是:@Autowired默认按类型装配,@Resource默认按名称装配,当找不到名称匹配的bean才会按类型装配。
@Autowired一般装配在set方法之上,也可以装配在属性上边,但是在属性上边配置,破坏了java的封装,所以一般不建议使用



1 public class AbstractBaseRedisDao<K, V> {
2 
3     @Autowired
4     protected RedisTemplate<K, V> redisTemplate;
5 
6     public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
7         this.redisTemplate = redisTemplate;
8     }



 

@Resource

的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略
@Resource装配顺序

1 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

2 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

3 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

4 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配;



1 @Service("deptService")
 2 @Transactional
 3 public class DeptServiceImpl implements IDeptService {
 4     @Resource
 5     private IDeptDao deptDao;
 6 
 7     public IDeptDao getDeptDao() {
 8         return deptDao;
 9     }
10 
11     public void setDeptDao(IDeptDao deptDao) {
12         this.deptDao = deptDao;
13     }



 

基于hibernate的事物:

 

<!-- 配置SessionFactory(整合Hibernate) -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 指定hibernate的配置文件的位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>  //dataSource数据连接配置
</bean>
<!-- 配置基于注解的事务支持-->
<tx:annotation-driven transaction-manager="transactionManager"/>

 

基于spring mvc的事物:

<!-- spring和MyBatis整合,不需要mybatis的配置映射文件 -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--自动扫描mapping.xml文件-->
<property name="mapperLocations" value="classpath:cn/jbit/mybatisdemo/dao/*.xml"></property>
</bean>

<!--事物管理-->
<bean name="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />     
</bean>

<!--注解方式配置事物-->
<tx:annotation-driven transaction-manager="transactionManager" />

 

给service层的实现类加上@Transactional,实现事物管理;