• spring.xml及注解


    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,实现事物管理;

  • 相关阅读:
    ACM
    Java实现排序
    HTML导出Excel文件(兼容IE及所有浏览器)
    WebForm应用log4net记录错误日志——使用线程列队写入
    @RefreshScope 配置方法
    Eclipse oxygen 版本汉化教程
    创建Dynamic Web Project时 显示最新Apache Tomcat 8.0 的方法
    微软汉字转拼音
    Ueditor 前后端分离实现文件上传到独立服务器
    汉字转拼音类(多音字)
  • 原文地址:https://www.cnblogs.com/-lpf/p/4281171.html
Copyright © 2020-2023  润新知