为了账号安全,请及时绑定邮箱和手机立即绑定
  • Bean的生命周期-初始化

    查看全部
  • Spring官网对Bean的作用域解释

    查看全部
  • Bean的作用域

    查看全部
  • Bean的常用配置项

    查看全部
  • Advice扩展

    一、给advice传递参数

    【a】方式一:在通知注解里写参数,通过&& args(参数名,..)传入参数,该参数可以是自己定义的类型,也可以为String等类型。(通常获取参数,进行一些判断或者日志的记录)

    https://img1.sycdn.imooc.com//5ced1b70000154bb09930112.jpg

    【a】方式二:切入点和通知分开写的方式,在切入点注解里写参数,在通知注解里引用切入点注解的方法名。

    https://img1.sycdn.imooc.com//5ced1b79000140cb10060168.jpg【b】运行时,生效的一个注解,这两个注解修饰在方法上,在通知注解里通过&& @annotation(运行时注解修饰的方法名,首字母小写),如果某个方法使用了运行时注解,则一定会给value()附一个值,在通知方法里可以通过方法参数,调用该方法得到该值(一般记录该注解用了哪些方法,或者用在判断该方法上是否加了某注解,后者判断获取到的值是哪值)

    https://img1.sycdn.imooc.com//5ced1caf0001417110610249.jpg

    查看全部
    0 采集 收起 来源:Advice扩展

    2019-05-28

  • Spring的设值注入

    查看全部
    0 采集 收起 来源:Spring注入方式

    2019-05-28

  • Spring的注入

    查看全部
    0 采集 收起 来源:Spring注入方式

    2019-05-28

  • Advice定义及实例(AspectJ中advice的定义)

    一、Before advice:对于切面类使用@Aspect修饰类,相当于<aop:aspect>配置,在方法上添加@Before(“execution(* com.imooc.aop.aspectj.biz.*Biz.*(..))”),相当于<aop:before>标签,@Component修饰类,省略了配置<bean>标签。

    案例(前置通知):

    步骤1:业务方法


    public class MoocBiz {

    public void print(){

    System.out.println("业务方法执行了");

    }

    }



    步骤2:切面方法


    @Aspect

    public class MoocAspect {

    @Before("execution(* *Biz.*(..))")

    public void beforeAdvice(){

    System.out.println("前置通知方法执行了");

    }

    }



    XML配置:


    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="http://www.springframework.org/schema/beans 

            http://www.springframework.org/schema/beans/spring-beans.xsd  

            http://www.springframework.org/schema/context

            http://www.springframework.org/schema/context/spring-context.xsd

            http://www.springframework.org/schema/aop 

            http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:component-scan base-package="src"></context:component-scan>

    <bean id="moocBiz" class="MoocBiz"></bean>

    <bean id="moocAspect" class="MoocAspect"></bean>

    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

    </beans>



    测试:

    @Test

    public void testMooc(){

    ApplicationContext ac=new ClassPathXmlApplicationContext("spring-ioc2.xml");

    MoocBiz mb=(MoocBiz) ac.getBean("moocBiz");

    mb.print();

    }


    结果:

    前置通知方法执行了

    业务方法执行了

    可以定义共享的pointcut(一个方法上使用@Pointcut("execution(* com.imooc.aop.aspectj.biz.*Biz.*(..))"),然后@Before("pointcut()")修饰另一个方法上


    @Aspect

    public class MoocAspect {

    @Pointcut("execution(* *Biz.*(..))")

    public void pointcut(){

    }

    @Before("pointcut()")

    public void beforeAdvice(){

    System.out.println("前置通知方法执行了");

    }

    }



    https://img4.sycdn.imooc.com/5ceceb06000199be09370596.jpg

    二、After returning advice

    和前置通知相似。

    https://img3.sycdn.imooc.com/5cecf2da0001e28509980222.jpg

    有时候需要在通知体内得到返回的实际值,可以使用@AfterReturning绑定返回值的形式,如果知道返回值类型可以写类型,如果不知道,可以写Object。

    https://img3.sycdn.imooc.com/5cecf3210001f25b09580253.jpg后置通知案例:


    public class MoocBiz {

    public void print(){

    System.out.println("业务方法执行了");

    }

    }

    @Aspect

    public class MoocAspect {

    @Pointcut("execution(* *Biz.*(..))")

    public void pointcut(){

    }

    @Before("pointcut()")

    public void beforeAdvice(){

    System.out.println("前置通知方法执行了");

    }

    @AfterReturning(pointcut="pointcut()",returning="o")

    public void afterAdvice(Object o){

    System.out.println("AfterReturning:"+o);

    }

    }

    <context:component-scan base-package="src"></context:component-scan>

    <bean id="moocBiz" class="MoocBiz"></bean>

    <bean id="moocAspect" class="MoocAspect"></bean>

    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

    结果:

    前置通知方法执行了

    业务方法执行了

    AfterReturning:null

    三、After throwing advice

    https://img1.sycdn.imooc.com/5cecf56b00011f4c08530198.jpg

    有时候需要在通知体内得到异常的实际值,可以使用@AfterReturning绑定返回值的形式

    https://img4.sycdn.imooc.com/5cecf5730001edd108440251.jpg

    案例:

    @AfterThrowing(pointcut="pointcut()",throwing="t")

    public void afterThrowAdvice(RuntimeException t){

    System.out.println("异常:"+t.getMessage());

    }

    public class MoocBiz {

    public void print(){

    System.out.println("业务方法执行了");

    throw new RuntimeException("运行时异常");

    }

    }

    结果:

    前置通知方法执行了

    业务方法执行了

    异常:运行时异常

    四、After(finally)advice

    最终通知必须准备处理正常和异常两种返回情况,它通常用于释放资源。(类似于try-catch中finally的功能)

    https://img1.sycdn.imooc.com/5cecf75c0001be0408050295.jpg


    @After("pointcut()")

    public void afterAdvice(){

    System.out.println("后置通知执行了");

    }


    前置通知方法执行了

    业务方法执行了

    后置通知执行了

    异常:运行时异常

    五、环绕通知(Around Advice)

    1、环绕通知使用@Around注解来声明,通知方法的第一个参数必须是ProceedingJoinPoint类型

    2、在通知方法内部会调用ProceedingJoinPoint的proceed()方法会导致执行真正的方法,同时可以传入一个Object[]对象,数组中的值将被作为参数传递给方法。

    案例:

    @Around("pointcut()")

    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable{

    System.out.println("环绕前置通知方法执行了========");

    Object o=pjp.proceed();

    System.out.println("环绕后置通知方法执行了========");

    return o;

    }

    结果:

    环绕前置通知方法执行了========

    前置通知方法执行了

    业务方法执行了

    环绕后置通知方法执行了========

    后置通知执行了

    AfterReturning:null



    查看全部
  • Bean容器初始化

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • Bean容器初始化

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • 单元测试类的

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • Spring的Bean配置

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • IOC的扩展理解

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • 什么是IOC?

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

  • 面向接口编程

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-28

举报

0/150
提交
取消
课程须知
Java的高级课程,适合对Java基础知识应用自如,并熟悉MVC架构的小伙伴们。如果想成为一名Java工程师,这门课程是一定要学哒。
老师告诉你能学到什么?
掌握依赖注入、IOC和AOP的概念,并能进行简单应用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!