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。

  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7541868.html
Copyright © 2011-2022 走看看