zoukankan      html  css  js  c++  java
  • Spring IOC AOP

    1. Spring

    Q: spring是什么?
    A: Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:
    反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring
    MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多
    著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。
    官网:http://spring.io/
    下载地址:
    http://repo.springsource.org/libs-release-local/org/springframework/spring
    解压:(Spring 目录结构:)
    * docs :API 和开发规范
    * libs :jar 包和源码.
    * schema :约束
     

    2. IOC

    控制反转-Inversion Of Control 概念:把创建对象的权力交给框架。包括:依赖注入和依赖查找。
    作用:
      削减计算机程序的耦合(解除我们代码中的依赖关系)
     
    基于注解的IOC配置:
      1. @Component
        作用:
          把资源让 spring 来管理。相当于在 xml 中配置一个 bean。
        属性:
          value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名。首字母小写。
      2. @Controller @Service @Repository
        他们的作用及属性都是一模一样的。只不过是提供了更加明确的语义化。
        @Controller:一般用于表现层的注解。
        @Service:一般用于业务层的注解。
        @Repository:一般用于持久层的注解。
        细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value 在赋值是可以不写。
      3. @Autowired
        作用:
          自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个
          类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功。找不到就报错。
      4.@Qualifier
        作用:
          在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和
        @Autowire 一起使用;但是给方法参数注入时,可以独立使用。
          属性:
          value:指定 bean 的 id。
      5.@Resource
        作用:
          直接按照 Bean 的 id 注入。它也只能注入其他 bean 类型。
        属性:
          name:指定 bean 的 id。
      6.@Value
        作用:
          注入基本数据类型和 String 类型数据的
        属性:
          value:用于指定值
      7.@Scope
        作用:
          指定 bean 的作用范围。
        属性:
          value:指定范围的值。
        取值:singleton prototype request session globalsession
      8.@PostConstruct
        作用:
        用于指定初始化方法。
      9.@PreDestroy
        作用:
        用于指定销毁方法。
      10.@Configuration
        作用:
        用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用
        AnnotationApplicationContext(有@Configuration 注解的类.class)。
        属性:
        value:用于指定配置类的字节码
      11.@ComponentScan
        作用:
        用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:
        <context:component-scan base-package="com.itheima"/>是一样的。
        属性:
        basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样。
      12.@Bean
        作用:
        该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。
        属性:
        name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)
      13.@PropertySource
        作用:
        用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到
        properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。
        属性:
        value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:
      14.@Import
        作用:
        用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题。
        属性:
        value[]:用于指定其他配置类的字节码。
     

    3. Junit

      1. @RunWith
        注解替换原有运行器
      2. @ContextConfiguration
        指定 spring 配置文件的位置
      3.@Autowired
        给测试类中的变量注入数据

    4. AOP

      AOP:Aspect Oriented Programming. 面向切面编程。
      作用:
        在程序运行期间,不修改源码对已有方法进行增强。
      优势:
        减少重复代码
        提高开发效率
        维护方便
      相关术语:
        1. Joinpoint(连接点):
          所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。
        2. Pointcut(切入点):
          所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。
        3. Advice(通知/增强):
          所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。
          通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
        4. Introduction(引介):
          引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field。
        5. Target(目标对象):
          代理的目标对象。
        6. Weaving(织入):
          是指把增强应用到目标对象来创建新的代理对象的过程。
          spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
        7. Proxy(代理):
          一个类被 AOP 织入增强后,就产生一个结果代理类。
        8. Aspect(切面):
          是切入点和通知(引介)的结合。
     
         配置:
          1. @Aspect
            把当前类声明为切面类
          2. @Before
            作用:
            把当前方法看成是前置通知。
            属性:
    value:用于指定切入点表达式,还可以指定切入点表达式的引用。
    @Before("execution(* com.itheima.service.impl.*.*(..))")
    3.@AfterReturning
    作用:
    把当前方法看成是后置通知。
    属性:
    value:用于指定切入点表达式,还可以指定切入点表达式的引用
    @AfterReturning("execution(* com.itheima.service.impl.*.*(..))")
     
    4. @AfterThrowing
    作用:
    把当前方法看成是异常通知。
    属性:
    value:用于指定切入点表达式,还可以指定切入点表达式的引用
    @AfterThrowing("execution(* com.itheima.service.impl.*.*(..))")
    5.@After
    作用:
    把当前方法看成是最终通知。
    属性:
    value:用于指定切入点表达式,还可以指定切入点表达式的引用
    @After("execution(* com.itheima.service.impl.*.*(..))")
    6. @Around
    作用:
    把当前方法看成是环绕通知。
    属性:
    value:用于指定切入点表达式,还可以指定切入点表达式的引用
    @Around("execution(* com.itheima.service.impl.*.*(..))")
    7.@Pointcut
    作用:
    指定切入点表达式
    属性:
    value:指定表达式的内容
    @Pointcut("execution(* com.itheima.service.impl.*.*(..))")

    5. JdbcTemplate

    它是 spring 框架中提供的一个对象。
     

    6. Spring中的事务控制

     

     传播行为:

    REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选
    择(默认值)
    SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
    MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
    REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
    NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
    NEVER:以非事务方式运行,如果当前存在事务,抛出异常
    NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。
    1. @Transactional
    @Transactional(readOnly=true,propagation=Propagation.SUPPORTS)
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    出现在接口上,表示该接口的所有实现类都有事务支持。
    出现在类上,表示类中所有方法有事务支持
    出现在方法上,表示方法有事务支持。
    以上三个位置的优先级:方法>类>接口
     
    2. @EnableTransactionManagement
    开启:spring对注解事务的支持。
     
  • 相关阅读:
    BizTalk2010动手实验(二)第一个BizTalk应用
    基于NopCommerce的开源电商系统改造总结
    BizTalk动手实验(六)Orchestration开发
    BizTalk动手实验(三)BizTalk开发综合实验
    项目管理-自上而下还是自下而上的沟通?
    BizTalk 2013 Beta 新特性介绍
    自主开发与带兵打仗
    Word邮件合并IT男必备技能
    三年项目管理,三个阶段
    BizTalk动手实验(八)消息路由
  • 原文地址:https://www.cnblogs.com/alice-bj/p/13180665.html
Copyright © 2011-2022 走看看