zoukankan      html  css  js  c++  java
  • spring两个核心IOC、AOP

    Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

    spring主要包括两个核心IOCAOP

    一、IOC Inversion of Control,即“控制反转”不是一种技术,是一种设计思想

    谁控制谁,控制什么:传统Java 程序中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建

    为何是反转,哪些方面反转了:传统JAVA程序中,由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,依赖对象的获取被反转了。

    如下面的代码,传统的程序是有程序员new出来HoteDaoAddImpl

              

    而在spring中,只需要在xml文件中配置如下,支持程序员动态配置,而不需要修改代码

              

    二、AOP

     AOP(Aspect Oriented Programming),即面向切面编程,是面向对象编程的的有力补充。面向对象编程关注的主要是业务处理,与之关系不大的部分是切面关注点。他们经常发生在核心业务的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心业务和切面关注点分离开来。

    例:如果需要在程序中的每个类执行前都加上日志“开始“,执行后都加上“结束”,传统的做法有三种,1、手动在每个类中加上日志代码,2、利用继承重写函数,3、利用组合的方式添加日志代码,但是这样做重复的代码会编写多次,降低了代码的效率。

    而利用aop只需要定义一个日志类,定义切点就可以了,只需要编写一次。如:

    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class log {
        // 切入点定义
        @Pointcut("execution(* com.pjf.spring.dao.*.*(..))")
        public void myPointcut() {
        };
    
        // 前置通知 : 在执行目标方法之前执行
        @Before("myPointcut()")
        public void before() {
            System.out.println("开始");
        }
        // @After 后置通知:在目标方法之后执行(出不出现异常始终执行)
        @After("myPointcut()")
        public void after() {
            System.out.println("结束");
        }
    
        //@AfterReturning 在目标方法完成之后运行(出现异常不执行)
        @AfterReturning("myPointcut()")
        public void afterReturning() {
            System.out.println("afterReturning()");
        }
    
        //@AfterThrowing 出现异常时执行
        @AfterThrowing("myPointcut()")
        public void afterThrowing() {
            System.out.println("afterThrowing()");
        }
    
        // @Around 既可以在目标完成之前织入,也可以在目标完成之后织入
        @Around("myPointcut()")
        public void around(ProceedingJoinPoint pjp) throws Throwable {
            System.out.println("环绕前....");
            pjp.proceed(); // 执行目标方法
            System.out.println("环绕后....");
        }
    }

    上面的代码定义了五种advice:before、after、around、AfterThrowing、afterReturning。

  • 相关阅读:
    React Native
    React Native
    MAC 虚拟机 IOS simulator 的快捷键操作
    在不打开 Xcode 的情况下独立启动 Xcode 自带的Simulator 模拟器
    {...this.props}是props所提供的语法糖,可以将父组件的所有属性复制给子组件
    XCODE archive打包历史版本查看
    Xcode的 build方式
    React Native之FlatList的介绍与使用实例
    react native 添加包含原生代码的库需要几个步骤:
    升级code11.3后遇到React Native启动报错的问题 getCurrentAppState:error 和 objectAtIndexedSubscript: 的解决方案
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7541868.html
Copyright © 2011-2022 走看看