菜鸟学习Spring——60s利用JoinPoint获取参数的值和方法名称

一、概述

AOP的实现方法在上两篇博客中已经用了两种方法来实现现在的问题来了虽然我们利用AOP,那么客户端如何信息传递?利用JoinPoint接口来实现客户端给具体实现类的传递参数。

二、代码演示。

目录结构:

SecurityHandler.java

		package com.tgb.spring;

		import org.aspectj.lang.JoinPoint;

		public class SecurityHandler{

			private void checkSecurity(JoinPoint joinPoint){
				for (int i = 0; i < joinPoint.getArgs().length; i++) {
					System.out.println(joinPoint.getArgs()[i]);
				}
				System.out.println(joinPoint.getSignature().getName());

				System.out.println("=====checkSecurity====");

			}

		}

Client.java

		package com.tgb.spring;

		import org.springframework.beans.factory.BeanFactory;
		import org.springframework.context.support.ClassPathXmlApplicationContext;

		import com.tgb.spring.UserManager;

		public class Client {

			public static void main(String[] args) {
			BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
				UserManager userManager=(UserManager) factory.getBean("userManager");
				userManager.addUser("张三", "123");
				//userManager.delUser(1);

			}
		}

UserManager.java

		package com.tgb.spring;

		public interface UserManager {

			public void addUser(String username,String password);

			public void delUser(int userId);

			public String findUserById(int userId);

			public void modifyUser(int userId,String username,String password);

		}

UserManagerImpl.java

		package com.tgb.spring;

		public class UserManagerImpl implements UserManager {

			public void addUser(String username, String password) {
				//checkSecurity();
					System.out.println("===UserManager.addUser===");

			}

			public void delUser(int userId) {
				//checkSecurity();
				System.out.println("===UserManager.delUser===");

			}

			public String findUserById(int userId) {
				//checkSecurity();
				System.out.println("===UserManager.findUserById===");
			return	"张三";
			}

			public void modifyUser(int userId, String username, String password) {
				//checkSecurity();
				System.out.println("===UserManager.modifyUser===");

			}

		//	private void checkSecurity(){
		//		System.out.println("checkSecurity");
		//
		//	}

		}

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"
			     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
		           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

		<bean id="userManager" class="com.tgb.spring.UserManagerImpl" />
		<bean id="securityHandler" class="com.tgb.spring.SecurityHandler"/>
		<aop:config>
			<aop:aspect id="securityAspect" ref="securityHandler">

				 <aop:pointcut id="addAddMethod" expression="execution(* com.tgb.spring.*.*(..))" />
				<aop:before method="checkSecurity" pointcut-ref="addAddMethod" />
			</aop:aspect>
		</aop:config>
		</beans>

效果图:

三、总结。

我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得。

时间: 2024-08-07 23:08:20

菜鸟学习Spring——60s利用JoinPoint获取参数的值和方法名称的相关文章

spring aop 利用JoinPoint获取参数的值和方法名称

AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口.任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息.我们先来了解一下这两个接口的主要方法: 1)JoinPoint ? java.lang.Object[] getArgs():获取连接点方法运行时的入参列表: ? Sign

菜鸟学习Spring——60s配置XML方法实现简单AOP

一.概述. 上一篇博客讲述了用注解的形式实现AOP如今讲述第二种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作參照上一篇博客<菜鸟学习Spring--60s使用annotation实现简单AOP> 文件夹结构: 事实上比起上一篇博客中用annotation来实现AOP的方式我们仅仅要把SecurityHandler.java和配置文件applicationContext.xml更改为以下内容就能够了.以下我把这两个文件的代码写下来. SecurityHandler.java

菜鸟学习Spring——60s让你学会动态代理

一.为什么要使用动态代理 当一个对象或多个对象实现了N中方法的时候,由于业务需求需要把这个对象和多个对象的N个方法加入一个共同的方法,比如把所有对象的所有方法加入事务这个时候有三种方法: 方法一:一个一个对象一个一个方法去加,很显然这个方法是一个比较笨的方法. 方法二:加一个静态代理对象将这个静态代理对象实现要加事务对象的接口.然后在静态代理对象里面每个方法里面加上事务. 方法三:使用动态代理对象,进行动态的加载事务. 使用动态代理是为了让对象实现了开闭原则,对扩展开放,而对修改关闭.Sprin

菜鸟学习Spring——60s学会Spring与Hibernate的集成

一.概述. Spring与Hibernate的集成在企业应用中是很常用的做法通过Spring和Hibernate的结合能提高我们代码的灵活性和开发效率,下面我就一步一步的给大家讲述Spring如何和Hibernate集成的. 二.代码演示. 导入Hibernate的jar包 Hibernate-3.2/lib/*.jar Hibernate-3.2/hibernate3.jar 还有导入Spring的相关jar包 我用的数据库是MySql所以要导入MySql的驱动jar包: mysql-conn

C#利用反射获取对象属性值

public static string GetObjectPropertyValue<T>(T t, string propertyname){     Type type = typeof(T); PropertyInfo property = type.GetProperty(propertyname); if (property == null) return string.Empty; object o = property.GetValue(t, null); if (o == n

C#分析URL参数并获取参数和值对应列表的方法

本文实例讲述了C#分析URL参数获取参数和值对应列表的方法.分享给大家供大家参考.具体分析如下: 这个C#函数用于分析url中传递的所有参数,输出一个参数名和参数值对应的NameValueCollection列表,经常能用得到 /// <summary> /// 分析 url 字符串中的参数信息 /// </summary> /// <param name="url">输入的 URL</param> /// <param name=

【ABAP系列】SAP ABAP获取域(domain)值的方法

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP获取域(domain)值的方法 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 1.可以通过表DD07L获取 2.通过函数获取 ? DATA: fs_taba TYPE dd07v. DATA: it_taba TYPE STANDARD TABLE OF dd07v, it_tabb

spring的控制器如何获取参数

1.控制器代码 获取参数的注解 @RequestParam(name="name", required=false, defaultValue="World") name是一个形参 defaultValue是一个默认值 原文地址:https://www.cnblogs.com/max-hou/p/11093681.html

spring的控制器如何获取参数、传递参数 和跳转指定页面

传递参数 (1)addAttribute()方法来获取参数 示例 //addAttribute()方法 ===setAttribute() 2 model.addAttribute("name", name); 获取参数 (1)@RequestParam用于获取参数 示例 1 @RequestParam用于获取请求参数,相当于servlet的request.getParameter()方法 2 3 public String greeting(@RequestParam(name=&q