Spring框架AOP使用扩展

一、什么是AOP

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

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

  3、默认采取的是JDK动态代理,面向接口编程的动态代理。

二、案例

  接下来我们通过具体案例对AOP进一步了解

    1、创建UserInfo实体类 

package com.spring.entity;

public class UserInfo {
    private Integer u_id;
    private String u_name;

    public Integer getU_id() {
        return u_id;
    }

    public void setU_id(Integer u_id) {
        this.u_id = u_id;
    }

    public String getU_name() {
        return u_name;
    }

    public void setU_name(String u_name) {
        this.u_name = u_name;
    }
}

  2、创建IUserMapper接口,定义一个添加方法

package com.spring.mapper;

import com.spring.entity.UserInfo;

/**
 * Dao层接口
 */
public interface IUserMapper {
    //添加用户
    public int addUser(UserInfo info);
}

   创建IUserMapperImpl实现层

package com.spring.mapper.impl;

import com.spring.entity.UserInfo;
import com.spring.mapper.IUserMapper;

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

  3、创建相对应的IUserMapperService接口,创建相同的方法

package com.spring.service;

import com.spring.entity.UserInfo;

public interface IUserMapperService {
    //添加用户
    public int addUser(UserInfo info);
}

  4、创建Service的实现类IUserMapperServiceImpl类

package com.spring.service.impl;

import com.spring.entity.UserInfo;
import com.spring.mapper.IUserMapper;
import com.spring.service.IUserMapperService;

public class IUserMapperServiceImpl implements IUserMapperService {
   //注入Dao层对象
    private IUserMapper iUserMapper;

    public IUserMapper getiUserMapper() {
        return iUserMapper;
    }

    public void setiUserMapper(IUserMapper iUserMapper) {
        this.iUserMapper = iUserMapper;
    }

    @Override
    public int addUser(UserInfo info) {
        int count = iUserMapper.addUser(info);
        return count;
    }
}

  5、在pom.xml中注入实现AOP的依赖

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.7.0</version>
</dependency>

  6、创建advice增强类MyBeforeAdvice

    //MethodBeforeAdvice表示前置增强,在执行逻辑代码之前执行的操作    //AfterReturningAdvice表示后置增强,在逻辑代码执行完毕之后进行的操作
package com.spring.advice;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class MyBeforeAdvice implements MethodBeforeAdvice, AfterReturningAdvice {

    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("==============前置增强,日志处理等操作===============");
    }

    @Override
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("==============后置操作,事务处理等操作================");
    }
}

  7、配置applicationContextUser.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:p="http://www.springframework.org/schema/p"

       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">

   <!--声明DaoBean  bean的注入的都是实现类-->
    <bean id="iUserMapper" class="com.spring.mapper.impl.IUserMapperImpl"></bean>
    <!--声明Service      class:对应的是你的Service实现类-->
    <bean id="iUserMapperService" class="com.spring.service.impl.IUserMapperServiceImpl">
        <!--setter方法怎么注入:找到Name属性值,将属性值的开头改为大写,然后前缀加上setIUserMapper-->
        <property name="iUserMapper" ref="iUserMapper"></property>
     </bean>

    <!--切面:对应增强类-->
    <bean id="myBeforeAdvice" class="com.spring.advice.MyBeforeAdvice"></bean>

    <!--增强处理-->
    <aop:config>
        <!--切点:你要对哪一个方法进行增强     -->
        <aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>

        <!--织入:将增强处理和切点表达式符合的方法关联到一起-->
        <aop:advisor advice-ref="myBeforeAdvice" pointcut-ref="pointcut"></aop:advisor>
    </aop:config>
</beans>

  8、Test测试类 

package com.spring.Aop;

import com.spring.entity.Student;
import com.spring.entity.UserInfo;
import com.spring.service.IUserMapperService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {
    public static void main(String[] args) {
        //加载applicationContext.xml文件
        ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContextUser.xml");
        IUserMapperService user = (IUserMapperService)cxt.getBean("iUserMapperService");
        user.addUser(new UserInfo());
    }
}

  9、执行结果如下

    

    

    

原文地址:https://www.cnblogs.com/tinghao/p/11747108.html

时间: 2024-11-09 20:06:51

Spring框架AOP使用扩展的相关文章

Spring框架 AOP(三)

AOP理论概述 Aspect Oriented Programming 面向切面编程 业界 AOP 实际上 OOP (面向对象编程 ) 延伸 -- OOP编程语言. AOP设计思想 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) 横向抽取代码复用,基于代理技术,在不修改原有对象代码情况下,对原有对象方法功能进行增强! ---- AOP 思想 Spring框架如何实现AOP Spring1.2 版本开始 开始支持AOP技术 (传统Spring AOP

Spring框架AOP源码剖析

今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西的源码剖析,作为多年的开发者,想必大家在面试的时候都被问过,你知道Spring框架AOP的底层实现机制吗,这可是很简单的噢,我们会说,如果某个类有接口就使用JDK动态代理,没有接口就用CGLIB动态代理,并且Spring也提供了可配置开关,不管有无接口都一律使用CGLIB动态代理,例如 <aop:aspectj-autoproxy proxy-target-class="true"/&

跟着刚哥学习Spring框架--AOP(五)

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这种散布在各

spring框架 AOP核心详解

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知 (2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用 (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

Spring框架AOP的使用及个人对底层原理的理解

Spring框架AOP的使用及个人对底层原理的理解**** 前言: AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,今天要给大家分享的是Spring框架AOP的使用,以及我个人对底层原理的一些理解. Aop使用步骤 配置aop信息 <aop:config> 相当于aop的根节点 配置切入点 <aop:piontcut> 切入点 可以理解为需要增强的方法

Spring框架Aop详解

一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnblogs.com/xrq730/p/4919025.html AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次

Spring中Aop的扩展及剖析

AOP简介: 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.面向对象编程是从[静态角度]考虑程序的结构,而面向切面编程是从[动态角度]考虑程序运行过程.AOP底层,就是采用[动态代理]模式实现的.采用了两种代理:JDK动态代理和C

Spring框架的XML扩展特性

Spring框架从2.0版本开始,提供了基于Schema风格的XML扩展机制,允许开发者扩展spring配置文件.现在我们来看下怎么实现这个功能,可以参考spring帮助文档中的<Extensible XML authoring>. 我们知道如果在需要在spring.xml中配置数据源,需要进行如下的配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&g

Spring框架--AOP

1.AOP (面向切面编程) AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 AOP 思想:横向重复.纵向抽取 2.底层实现: Spring 的 AOP 的