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。

posted @ 2017-09-18 10:32  梦天幻  阅读(406)  评论(0编辑  收藏  举报