最简单的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"});

原文地址:https://www.cnblogs.com/wanglichaoya/p/11547778.html