zoukankan      html  css  js  c++  java
  • Spring AOP的使用及案例

    一、什么是AOP

      AOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

    二、为什么需要AOP 

      1.分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

      2.减少代码的重复,各个模块的重用性加强。

      3.降低 模块间的耦合度,提高代码的可操作性和可维护性。

    三、AOP原理

      将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

      采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。

      

    四、AOP相关术语

       1 增强处理类型

        前置增强:目标方法调用前

        后置增强:目标方法调用后

        环绕增强:前置+后置

        异常抛出增强:只有在目标方法抛出异常时才执行

        最终增强:finally

     

      2 AOP设计单元


    五、AOP案例

      1.创建实体类

        略;

      2.创建接口

        

    public interface IUserMapper {
        public int addUser(IUser iUser);
    }

      3.创建实现类

    public class IUserMapperImpl implements IUserMapper {
    
        @Override
        public int addUser(IUser iUser) {
            System.out.println("add success");
            return 0;
        }
    }

      4.创建切面类

    public class MyAdvice implements MethodBeforeAdvice {
        @Override
        public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("前置增强");
        }
    }

      5.编写applicationContext.xml配置文件

    <!--声明MapperBean-->
        <bean id="iuserMapper" class="cn.spring.mapper.impl.IUserMapperImpl"></bean>
       <!--声明serviceBean-->
        <bean id="iuserService" class="cn.spring.service.impl.IUserServiceImpl">
            <property name="iUserMapper" ref="iuserMapper"></property>
        </bean>
    
    
        <!--切面:增强类-->
        <bean id="myAdvice" class="cn.spring.advice.MyAdvice"></bean>
        <!--增强处理-->
        <aop:config>
            <aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>
            <!--织入:将增强处理和切点表达式符合的方法关联到一起-->
            <aop:advisor advice-ref="myAdvice" pointcut-ref="pointcut"></aop:advisor>
        </aop:config>

      6.编写测试类

     @Test
        public void test1(){
            ApplicationContext contet=new ClassPathXmlApplicationContext("applicationContext.xml");
            IUserService iuserService = (IUserService) contet.getBean("iuserService");
            iuserService.addUser(new IUser());
        }

     五、IOC与AOP交互扩展

       1 使用多种方式实现 IOC

        1.1 构造注入
          

     public Student(Integer stu_id, String stu_name) {
            this.stu_id = stu_id;
            this.stu_name = stu_name;
        }
    
        public Student(){
    
        }
     <!--基于构造注入-->
        <bean id="student" class="cn.spring.student.Student">
            <constructor-arg type="java.lang.Integer" value="15"></constructor-arg>
            <constructor-arg type="java.lang.String"  value="李四"></constructor-arg>
        </bean>

        1.2 p命名空间注入

    xmlns:p="http://www.springframework.org/schema/p"
    public class Student {
        private Integer stu_id;
        private String stu_name;
    
        public Integer getStu_id() {
            return stu_id;
        }
    
        public void setStu_id(Integer stu_id) {
            this.stu_id = stu_id;
        }
    
        public String getStu_name() {
            return stu_name;
        }
    
        public void setStu_name(String stu_name) {
            this.stu_name = stu_name;
        }
    
    }
    <!--p命名空间注入-->
        <bean id="student" class="cn.spring.student.Student" p:stu_id="78" p:stu_name="王五"></bean>
  • 相关阅读:
    互联网 | 逻辑上的黑话才是真正的花里胡哨
    OLAP引擎:基于Druid组件进行数据统计分析
    数据调度组件:基于Azkaban协调时序任务执行
    职场 | 工作五年之后,对技术和业务的思考
    数据搬运组件:基于Sqoop管理数据导入和导出
    valgrind 内存泄漏分析
    Solon Cloud 分布式服务开发套件清单,感觉受与 Spring Cloud 的不同
    Solon 的想法与架构笔记
    对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.8 发布
    对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.2 重要发布
  • 原文地址:https://www.cnblogs.com/szhhhh/p/11743420.html
Copyright © 2011-2022 走看看