zoukankan      html  css  js  c++  java
  • 最简单的SpringAop 小案例

    网盘下载地址:

       链接:https://pan.baidu.com/s/1Z-em-1ouWyXeMP3JW0IbCg
       提取码:0o4o

    1、目录结构:


    2、配置文件  applicationContext.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:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <!--告訴Spring使用注解的形式-->
       <!-- <context:annotation-config/>
         控制反转目标类
        <bean name="c" class="com.how2java.pojo.Category">
            <property name="name" value="category 1" />
        </bean>
        <bean name="product" class="com.how2java.pojo.Product">
            <property name="name" value="牙刷"></property>
           &lt;!&ndash; <property name="category" ref="c"></property>&ndash;&gt;
        </bean>-->
        <!--<context:component-scan>: 表示要扫描那个包下面的文件,然后通过注解的形式注入进来-->
        <context:component-scan base-package="com.how2java.pojo,com.how2java.service,com.how2java.controller"></context:component-scan>
    
        <!--面向切面编程 SpringAOP 开始-->
    
        <!--控制反转切面类-->
        <bean name="loggerAspect" class="com.how2java.aspect.LoggerAspect"></bean>
    
        <!--控制反转切面类-->
        <bean name="controllerAspect" class="com.how2java.aspect.controllerAspect"></bean>
    
    
    
    
    
        <aop:config>
            <!--<aop:pointcut>:作用: 设置切入点的作用对象和id-->
            <aop:pointcut id="loggerCutpoint" expression="execution(* com.how2java.service.ProductService.*(..))"></aop:pointcut>
            <aop:pointcut id="curePoint" expression="execution(* com.how2java.controller.TestController.*(..))"></aop:pointcut>
    
            <!--<aop:aspect>:作用:设置切面的id-->
            <aop:aspect ref="loggerAspect" id="logAspect">
                <aop:before method="before" pointcut-ref="loggerCutpoint"></aop:before>
                <aop:after method="after" pointcut-ref="loggerCutpoint"></aop:after>
                <aop:around method="log" pointcut-ref="loggerCutpoint"></aop:around>
    
            </aop:aspect>
    
            <aop:aspect ref="controllerAspect" id="conAspect">
                <aop:before method="testController" pointcut-ref="curePoint"></aop:before>
            </aop:aspect>
        </aop:config>
    
        <!--面向切面编程 SpringAOP 结束-->
    
    </beans>

    3、切面类  controllerAspect.java   、LoggerAspect.java

    package com.how2java.aspect;
    
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    
    /**
     * describe:
     *
     * @author 王立朝
     * @date 2019/09/18
     */
    public class controllerAspect {
    
        public void testController(){
            System.out.println("执行controller之前先执行这个方法再说==");
        }
    }
    package com.how2java.aspect;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.springframework.stereotype.Component;
    import sun.misc.Contended;
    
    /**
     * describe:日志,切面
     *
     * @author 王立朝
     * @date 2019/09/18
     */
    public class LoggerAspect {
    
        public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
            System.out.println("日志开始-" + joinPoint.getSignature().getName());
            Object object = joinPoint.proceed();
            System.out.println("日志结束-" + joinPoint.getSignature().getName());
            return object;
        }
    
        public void before(){
            System.out.println("最先开始---" );
    
        }
    
        public void after(){
            System.out.println("最后结束的---" );
        }
    }

    4、目标方法类  TestController.java 、 ProductService.java

    package com.how2java.controller;
    
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    
    /**
     * describe:
     *
     * @author 王立朝
     * @date 2019/09/18
     */
    @Component("testController")
    public class TestController {
    
        public void testController(){
            System.out.println("控制器");
        }
    }
    package com.how2java.service;
    
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Service;
    
    /**
     * describe:业务类
     *
     * @author 王立朝
     * @date 2019/09/18
     */
    /*@Component("productService")*/
        @Service
    public class ProductService {
    
        public void doSomeService(){
            System.out.println("doSomeService");
        }
    
    
    }

    5、测试类

    package com.how2java.test;
    
    import com.how2java.controller.TestController;
    import com.how2java.service.ProductService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * describe:
     *
     * @author 王立朝
     * @date 2019/09/18
     */
    public class TestSpringAop {
    
        public static void main(String[] args){
    //        productService
    
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            ProductService productService = (ProductService) context.getBean("productService");
            productService.doSomeService();
          /*  TestController testController = (TestController) context.getBean("testController");
            testController.testController();*/
        }
    }

     6、运行结果

    注意,在Spring中获取bean 的方式

    当只有一个配置文件的时候,可以用下面的方式来获取上下文

    ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);

    如果有多个配置文件,可以用下面的方式来获取上下文

    ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml","helloContext.xml"});

  • 相关阅读:
    latex
    anaconda
    git stash
    YOLO训练Pedestrain
    OpenCL C
    OpenCL
    OpenVX
    caffe源码阅读
    居住证积分查询地址
    jdk 1.8内存逐步增大的一个bug
  • 原文地址:https://www.cnblogs.com/wanglichaoya/p/11547778.html
Copyright © 2011-2022 走看看