`
haoran_10
  • 浏览: 443207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring aop 注解入门

    博客分类:
  • java
阅读更多

继上篇spring IOC,又学习了,spring AOP,同样是注解模式:

 

面向切面:

import com.pac;//1.包名--不可变

Class className{//2.类名--不可变

//3.返回类型--不可变

//4.方法名称--不可变

//5.入参类型--不可变

//6.入参值--可变

//7.异常--可捕获

//8.返回值--可变

public T getDate(D inData)throws Exception{

return T;

}

 

 

面向方法的切面:

执行前:对入参D inData或者调用者进行处理

执行后:对返回值T 或者调用者进行处理

异常处理:对获取的异常或调用者进行处理

执行之中:对调用者,入参,返回值,以及异常进行处理--很强大,其实直接用这个就行。

 

小例子:

1.有一个业务,很简单,对传入的参数进行处理,然后返回

 

package com.aop.service;


import org.springframework.stereotype.Component;

import com.aop.bo.InputVal;
import com.aop.bo.ReturnVal;

@Component
public class ServiceImpl {
	public ReturnVal getData(InputVal val) throws Exception{
		ReturnVal rtVal = new ReturnVal();
		//模拟处理
		rtVal.setKey(val.getKey()+"处理后");
		rtVal.setValue(val.getValue()+"处理后");
		System.out.println("------------执行中-------------");
		//模拟异常
//		if(val.getKey().equals("ex")){
//			throw new Exception("异常!");
//		}
		return rtVal;
	}
	
	public String toString() {
		return "ServiceImpl调用者";
	}

}

 

2.入参数据:

 

package com.aop.bo;


public class InputVal {
	private String key = null;
	private String value = null;
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	@Override
	public String toString() {
		return "InputVal [key=" + key + ", value=" + value + "]";
	}
	
	
}

 

 3.出参数据:

 

package com.aop.bo;

public class ReturnVal {
	private String key = null;
	private String value = null;
	
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	@Override
	public String toString() {
		return "ReturnVal [key=" + key + ", value=" + value + "]";
	}
	
}

 

 

4.对业务进行切面:

 

package com.aop.aop;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import com.aop.bo.InputVal;
import com.aop.bo.ReturnVal;

@Component
@Aspect
public class AopService {
	
//	@Pointcut("execution(* com.aop.service.ServiceImpl.getData(..))")
//	private void cut(){}
	private final String CUT = "execution(* com.aop.service.ServiceImpl.getData(..))";
	
	/*
	//方法执行前调用
	@Before(CUT)
	public void before(){
		System.out.println("-----------执行前--------------------");
	}
	
	//方法执行后调用  
    @After(CUT)  
    public void after() {  
        System.out.println("------------执行后------");  
    }
    */
    @Around(CUT)   //spring中Around通知  环绕通知
    public Object logAround(ProceedingJoinPoint joinPoint) {
    	Object tarjet = joinPoint.getTarget();//1.调用者
    	//-----日志,调用者
    	System.out.println("1.调用者:------"+tarjet);
    	
        Object[] args = joinPoint.getArgs();//2.传参
        System.out.println("2.传参:----"+args[0]);
        
        if(args[0] instanceof InputVal){
        	InputVal val = (InputVal) args[0];
        	val.setKey(val.getKey()+"改了么?");
        }
        
        Object obj = null;
        try {
			obj = joinPoint.proceed(args);
			if(obj.getClass().equals(ReturnVal.class)){
				ReturnVal rval = (ReturnVal) obj;
				rval.setValue(rval.getValue()+"改了?");
			}
		} catch (Throwable e) {
			e.printStackTrace();
		}
        
        System.out.println("3.返回参数:---"+obj);//3.返回参数
        
        return obj;
    } 
}

 

 5.调用测验:

 

package com.aop.test;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.aop.bo.InputVal;
import com.aop.service.ServiceImpl;

public class Main {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
		
		ServiceImpl si = (ServiceImpl) ctx.getBean("serviceImpl");
		
		InputVal val = new InputVal();
		val.setKey("inKey");
		val.setValue("inVal");
		System.out.println(si.getData(val));
	}

}

 

 6.配置文件,要打开aop注解扫描:

 

<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
 	
 
 	<!-- 扫描com.ioc下的所有类,自动为spring容器管理 -->
    <context:component-scan base-package="com"/>
     <!-- 打开面向切面工具 -->
     <aop:aspectj-autoproxy/>
</beans>

 

 

分享到:
评论

相关推荐

    spring aop注解版

    总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...

    spring AOP入门实例

    在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...

    spring AOP入门教程

    - **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...

    Spring Aop基础入门

    Spring Aop基于annotation注解练习

    Spring AOP快速入门_源码

    Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了一种模块化和声明式的方式来处理横切关注点,如日志、事务管理、性能监控等。在传统的面向对象编程...

    最简单的SpringAOP入门案例

    **Spring AOP 入门案例详解** 在Java开发中,Spring框架因其强大的功能和灵活性而备受推崇,其中Spring AOP(Aspect Oriented Programming,面向切面编程)是它的一个重要特性。AOP允许开发者将关注点从核心业务...

    使用Spring的注解方式实现AOP入门

    在学习过程中,您可以参考压缩包中的`springAOP`文件,其中可能包含示例代码和详细的步骤解释,帮助您更好地理解和实践这些概念。动手实践是掌握Spring AOP的最好方式,通过创建自己的切面和通知,您将能够深入理解...

    Spring 入门案例——AOP

    本入门案例将帮助你理解并掌握Spring AOP的基本概念和使用方法。 在Spring AOP中,我们首先需要了解的是"切面"(Aspect)的概念。切面是封装了横切关注点的代码模块,它可以包含通知(Advice)、切点(Pointcut)和...

    Spring AOP简单demo

    在Spring AOP中,通过表达式或注解来定义切入点。 3. **通知(Advice)**:通知是在特定切入点上执行的行为,比如记录日志、开始/结束事务等。有五种不同类型的通知:前置通知(Before)、后置通知(After)、返回...

    SPRING AOP详细培训视频

    4. 使用注解驱动的AOP配置,以及如何在Spring配置文件中启用AOP自动代理。 5. 引入的概念和使用,以及如何通过引入增加类的方法或属性。 6. 实践示例,可能包括事务管理、日志记录等实际应用场景的AOP实现。 通过这...

    Spring AOP 入门实例

    **Spring AOP 入门实例** 在Java编程中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许程序员定义“横切关注点”,如日志、事务管理、性能监控等,然后将这些关注点与核心业务逻辑...

    Spring AOP 入门实例1

    **Spring AOP 入门实例1** 在Java开发中,Spring框架因其强大的功能和灵活性而备受推崇,其中Spring AOP(Aspect Oriented Programming,面向切面编程)是其重要组成部分。AOP允许开发者定义“切面”,这些切面可以...

    Spring AOP入门及其实例讲解、下载

    **Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...

    spring的aop简单例子

    Spring 2.5引入了对注解的AOP支持,使得配置更加简洁。我们可以直接在切面类上使用`@Aspect`注解,然后在方法上使用`@Before`、`@After`、`@Around`等注解来定义通知。例如: ```java @Component @Aspect ...

    Spring_Aop入门例子

    在本入门例子中,你将学习如何在Spring环境中设置并使用AOP。 首先,我们需要理解AOP的基本概念。在面向对象编程中,业务逻辑代码往往会被一些通用的、非核心的代码(如日志、事务)所穿插,这降低了代码的可读性...

    spring aop 详细介绍

    5. **Spring AOP入门**: Spring AOP通过XML配置或者注解方式来实现AOP功能。在XML配置中,可以定义Bean、Advisor、Pointcut等元素。在注解方式下,可以使用`@Aspect`、`@Before`、`@After`、`@AfterReturning`、`@...

    spring aop管理xml版

    在Spring中,切入点通常通过表达式或者注解来定义。 5. **织入(Weaving)** 织入是将切面应用到目标对象,创建代理对象的过程。Spring支持运行时织入和编译时织入,其中运行时织入更为常见,它可以在应用运行时...

    Spring AOP @AspectJ 入门实例

    @AspectJ是Spring AOP的一个扩展,它提供了一种更接近传统编程的注解驱动的方式来定义切面。接下来,我们详细讲解如何使用@AspectJ进行切面定义: 1. **创建切面类**:首先,你需要创建一个Java类,并使用`@Aspect`...

    springAOP-dome

    在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...

Global site tag (gtag.js) - Google Analytics