Springboot学习七 spring的一些注解

一 事务控制

@Service
public class CityServiceImpl implements CityService {

    @Autowired
    private CityMapper cityMapper;

    @Override
    @Transactional(value = "primaryTxMan", readOnly = true)
    public List<City> findByState(String state) {
        return this.cityMapper.findByState(state);
    }
}

@Transcational(readOnly=true) 这个注解一般会写在业务类上,或者其方法上,用来对其添加事务控制。当括号中添加readOnly=true, 则会告诉底层数据源,这个是一个只读事务,对于JDBC而言,只读事务会有一定的速度优化。

二  Transactional的value

   value这里主要用来指定不同的事务管理器;主要用来满足在同一个系统中,存在不同的事务管理器。比如在Spring中,声明了两种事务管理器txManager1, txManager2.

然后,用户可以根据这个参数来根据需要指定特定的txManager.

  那有同学会问什么情况下会存在多个事务管理器的情况呢? 比如在一个系统中,需要访问多个数据源或者多个数据库,则必然会配置多个事务管理器的。

三  value = "primaryTxMan" 表示提供的事务管理器,是一个bean的名字

  primaryTxMan是一个bean的名字,在下面配置。

四  @Configuration    @Bean 

  @Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean

  比如如下的配置类AppConfig和下面的XML配置是等价的。

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }
}

下面的XML和上面的配置等价

<beans>
    <bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

如下是primaryTxMan这个bean的定义,bean的名字是primaryTxMan

@Bean(name = "primaryTxMan")
    public PlatformTransactionManager primaryTransactionManager() {
        logger.info("primary dataSource--" + this.primeryDataSource().hashCode());
        return new DataSourceTransactionManager(this.primeryDataSource());
    }

五  下面看看  DataSourceTransactionManager 的定义,看看如何和DataSource绑定的

  DataSourceTransactionManager的构造函数需要传入一个DataSource类型的参数。下面看this.primeryDataSource()是如何提供DataSource的实现的:

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primeryDataSource() {
        return new DruidDataSource();
    }
  @Primary: 如果一个接口有两个实现类,可以用@Autowired,指定不同的名字进行绑定;另外一种方式就是使用@Primary,指定优先绑定的那个实现类。
  @ConfigurationProperties(prefix = "spring.datasource.primary"):指定和配置文件中的属性绑定。

原文地址:https://www.cnblogs.com/liufei1983/p/8973158.html

时间: 2024-11-08 13:53:45

Springboot学习七 spring的一些注解的相关文章

SpringBoot学习(二):注解

spring学习最重要的就是注解吧... 1.Bean的声明 @Component组件,没有明确的角色.@Service在业务逻辑层(service层)使用.@Repository在数据访问层(dao层)使用.@Controller在展现层(MVC→Spring MVC)使用. 特别说明: 在声明普通Bean的时候,使用@Component.@Service.@Repository和@Controller是等同的,因为@Service.@Repository.@Controller都组合了@Co

SpringBoot学习(二)--&gt;Spring的Java配置方式

二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的: 1.@Configuration 作用于类上,相当于一个xml配置文件: 2.@Bean 作用于方法上,相当于xml配置中的<bean>: 2.示例 该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IO

SpringBoot学习(一)-Spring的发展

一.Spring的发展 1.Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换. 2.Spring2.x时代 随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发. 那么,问题来了,究竟是应该使用xml还是注解呢? 最佳实践:(IoC推荐注解:AOP推荐配置) 1. 

springboot学习章节-spring常用配置

1.Scope package com.zhen.highlights_spring4.ch2.scope; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; /** * @author zhen * @Date 2018/6/12 11:38 */ @Service @Scope("prototype") public class De

spring学习七 spring和dynamic project进行整合

spring和web项目进行整合,其实就是在项目启动时,就创建spring容器,然后在servlet中使用spring容器进行开. 注意:为了页面可以访问到servlet,因此servlet必须放进tomcat或者类似的服务器容器中,如果把servlet放进spring容器中,前端页面是无法访问的 第一步:导入spring-web.jar包,因为有一些别的依赖关系,还需要导入spring-tx.jar,spring-aop.jar等包 第二步:编写web.xml配置文件 在web.xml配置一个

java spring mvc 全注解

本人苦逼学生一枚,马上就要毕业,面临找工作,实在是不想离开学校.在老师的教导下学习了spring mvc ,配置文件实在繁琐,因此网上百度学习了spring mvc 全注解方式完成spring的装配工作; 废话不多说了上干货,其实我也没怎么理解不过简单的运行了一个spring mvc 全注解项目,也不能说是全注解,因为保留了web.xml和spring-serlvet.xml文件,(可能有的童鞋会说,这样配置可能对以后的修改不方便,无法达到只修改配置文件就切换某些环境.其实不是,零配置文件只是修

跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Respository:标识持久层组件 3.@Service:标识业务层组件 4.@Controller:标识表现层组件 Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称 当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件

Spring学习(9)--- @Autowired注解(二)

可以使用@Autowired注解那些众所周知的解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,ApplicationEventPublisher,MessageSource package com.mypackage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.conte

springMVC3学习(七)--Interceptor拦截器

Spring为我们提供了:org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器, 实现这个接口或继承此类,能够很方便的实现自己的拦截器. 有下面三个方法: Action之前运行 public boolean preHandle(HttpServletRequest request, HttpServletR