• spring之AOP


    AOP

    Aspect(切面) Oritend(面向)Progrmming(编程) 面向切面编程

    Advice(通知)     connetpoint(连接点)       pointcut(切点)   caspect(切面)    advisor(织入)

    软件系统可以是一组关注点组成的,直接的业务关注点就是直切关注点(主业务)

    为直切关注点提供服务的就是横切关注点(交叉业务)。

    切面:横切关注点被模块化的类,就叫切面。也就是增强类。深入的说就是

    通知和切点的集合。

    通知:增强类中的方法,就是通知。

    连接点:在一个应用执行过程中,能插入一个切面的点。也就是说 主业务类的所有方法都是连接点,不一定是切点。

    切点:可以切到一个或多个连接点,切到一个方法就是切点。

    织入:增强(通知)和切点绑定的过程。

    案例:

    1. 引依赖

    <!--织入的依赖-->
    <dependency>
      <groupId> org.aspectj</groupId >
      <artifactId> aspectjweaver</artifactId >
      <version> 1.8.7</version>
    </dependency>

    2.

     

    Dao层

    public interface IUserDAO {   //接口
        public void save(User user);
    }

    实现类

    public class UserDAOImpl implements IUserDAO {
        public void save(User user) {
            System.out.println("sev sess!!!");
        }
    }

     

    Service层   

    public interface IUserService {   //接口
        public void seve2(User user);
    }

     //实现类

    public class UserServiceImpl implements IUserService {
    public void seve2(User user) {

    dao.seve(user);
        }
        private IUserDAO dao;    //域属性
        public IUserDAO getDao()
        {
            return dao;
        }
        public void setDao(IUserDAO dao)
        {
            this.dao = dao;
        }

    }

    AOP层

    public class LoggerBeforeAdvice implements MethodBeforeAdvice {
        //Before  实现没实现的方法
        public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("我比你先执行!!!");
        }
    }

    配置  注册

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    ">

    <!-- dao -->

    <bean id=”dao”class=“cn...UserDAOImpl”></bean>

    Calss 只能写接口实现类

    <!-- service -->

    <bean id=“service” class=“cn...UserServiceImpl”></bean>

    //域属性的注入   用 ref  ref指向 <dean id=dao>

    <property name=”dao” ref=”dao”> </property>

    <!--advice 通知-->

    <bean id=”befoadvice” class=”cn...LoggerBeforeAdvice

    ”></bean>

    <!--切面  要导aop命名空间 -->

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

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

    <aop:config>
        <!--01.切点-->

    <aop :pointcut id=mypointcut expression=execution

    (public void sve2(cn....User))”></aop:pointcut>

     <!--02.织入-->

    <aop:advisor advice-ref=”befoadvice” pointcut-ref=”mypintcount”> </aop:advisor>

    //测试

    public class SpringTest0724 {
     @Test
     //aop测试
         public  void aop01(){
             ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContextspring03aop.xml");
             IUserDAO biz=(IUserDAO) ctx.getBean("dao");
             User user=new User();
             biz.save(user);
             System.out.println("success!");
     }

    结果

  • 相关阅读:
    laravel5.5源码笔记(二、服务提供者provider)
    laravel5.5源码笔记(一、入口应用的初始化)
    laravel5.5源码阅读草稿——路由
    laravel5.5源码阅读草稿——application
    NOIP2018提高组爆炸记
    复习3-数据结构模板
    复习2-数论模板
    复习1-图论模板
    洛谷P3960 列队
    poj3159 Candies
  • 原文地址:https://www.cnblogs.com/wangdan123/p/7398824.html
Copyright © 2020-2023  润新知