一.将对象配置到容器

1.xml文件:空参构造

<bean name="user" class="com.spring.bean.User" scope="prototype" init-method="init" destroy-method="destroy"></bean>

2.指定扫描com.spring.bean包下所有类中的注解.注:会扫描包下的所有后代包

<context:component-scan base-package="com.spring.bean"></context:component-scan>

注解:

  • @Component("BeanName") 将对象注册到spring容器

    • @Controler 控制层
    • @Service 业务层
    • @Repository dao层
  • @Scope 指定对象的作用范围

    • singleton 单例模式
    • prototype 多例
  • @Value 值类型属性注入

  • @Autowired 自动属性注入.根据类型注入

  • @Qulifier 指定注入的对象的名称

  • @Resource 指定对象的名称注入

  • @PostConstruct 初始化方法

  • @PreDestory 销毁方法

二.Spring AOP开发

  1. 定义代理对象

    • 配置目标对象
    • 配置通知对象
    • 定义代理对象
    <!-- proxyInterfaces:织入目标对象接口 -->
    <!-- target-ref:织入目标引用 -->
    <!-- interceptorNames:织入后置增强 -->
    <bean name="customerBean" class="org.springframework.aop.framework.ProxyFactoryBean"
    p:proxyInterfaces="com.spring.service.ICustomerService"
    p:target-ref="customerService" p:interceptorNames="surveyAfterAdvice,buyBeforeAdvice">
    </bean>
  2. 将通知织入到目标对象(xml文件)

    • 配置目标对象
    • 配置通知对象
    • 配置将通知织入目标对象
        <aop:config>
    <!-- 配置切入点 -->
    <aop:ponint-cut id="切点名称" expression="execution(切点表达式)" />
    <!-- 指定通知类中方法的通知类型 -->
    <aop:aspect ref="通知对象名称" >
    <aop:before method="" ponintcut-ref="" />
    <aop:after-returning method="" ponintcut-ref="" />
    <aop:around method="" ponintcut-ref="" />
    <aop:after-throwing method="" ponintcut-ref="" />
    <aop:after method="" ponintcut-ref="" />
    </aop:aspect>
    </aop:config>
  3. 开启aop注解(注解)

    • 配置目标对象(xml)

    • 配置通知对象(xml)

    • 开启使用注解完成注入

      <aop:aspectj-autoproxy></aop:aspectj-autoproxy>(xml)

      @Aspect 指定当前类是通知类

      @Before(execution(切点表达式)) 前置通知方法

      @after-returning(execution(切点表达式)) 后置通知方法

      @around(execution(切点表达式)) 环绕通知方法

      @after-throwing(execution(切点表达式)) 异常拦截通知方法

      @after(execution(切点表达式)) 后通知方法


    @Pointcut("execution(* com.spring.service.*ServiceImpl.*(..))")

    @PointCut 抽取切点表达式

    public void pc(){}

    @Before("MyAdvice.pc()")

    @after-returning("MyAdvice.pc()")

    @Around("MyAdvice.pc()")

    @after-throwing("MyAdvice.pc()")

    @after("MyAdvice.pc()")

三.spring事务

  1. spring声明式事务
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 以方法为单位,指定方法应用什么事务属性 -->
<!-- name:事务方法名; isolation:隔离级别; propagation:传播行为; read-only:是否只读 -->
<tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
<tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true"/>
<tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice> <!-- 配置将事务通知织入目标对象 -->
<aop:config>
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(* com.spring.tx.*ServiceImpl.*(..))" id="txPc"/>
<!-- 配置切面:通知+切点 advice-ref:通知的名称 pointcut-ref:切点的名称 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPc"/>
</aop:config>

2.spring事务注解

<!-- 开启使用注解管理aop事务 -->
<tx:annotation-driven/> //类上
@Transaction(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public class AccountServiceImpl{} //方法上
@Transaction(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public void update*(..){}

四:SpringThinking的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  4. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)

    前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...

  7. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  8. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

  9. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

随机推荐

  1. LeetCode 刷题指南(1):为什么要刷题

    虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...

  2. “全栈2019”Java第十八章:一元运算符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. POJO和Javabean的区别:

    pojo:存粹java类,不继承,不实现.(不受限制的java类),多用于指数据库的映射对象javaBean:可复用组件,由容器(tomcat)创建,因此应具有无参构造器,不能跨进程访问,通常要无方法 ...

  4. curl命令上传下载文件

    下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件 ...

  5. 【医学影像】《Identifying Medical Diagnoses and Treatable Diseases by Image-Based Deep Learning》论文笔记

    这篇论文的作者是张康教授为首的团队,联合国内外众多医院及科研机构,合力完成,最后发表在cell上,实至名归. 从方法的角度上来说,与上一篇博客中的论文很相似,采用的都是InceptionV3模型,同时 ...

  6. logback 发送邮件的类.

    类名 : SMTPAppenderBase方法名: sendBuffer

  7. SqlServer数据库《基本》

    数据库简单说就是行.列组成的二维表 把列称为字段.每一行数据成为记录,能标识每一行的唯一字段称为主键 查询数据表时,索引可以提高查询速度,但是索引同时会降低新增和更新数据时的速度,应为还要更新索引. ...

  8. python 模块和包以及他们的导入关系

    一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

  9. iis+php(FastCGI)

    1. 安装 IIS 时选择添加 CGI 功能 2. 安装 PHP, 2.1 下载 nts 版本 (非线程安全版本) zip 压缩包,下载对应的 vc++ 运行时(php官网下载页面左侧有下载链接) 2 ...

  10. win10安装ubuntu子系统配置

    # 更改apt源 cat > /etc/apt/sources.list <<'END' #阿里云 deb http://mirrors.aliyun.com/ubuntu/ tru ...