工作后好多师弟师妹问我spring aop,我就写了这样一个例子

前言介绍:

        毕业开始工作后,逐渐的学习了一些再学校不曾学习到的东西。时而师弟师妹会问一些关于技术的问题,我也是耐心解答,同时更希望用娱乐方式的例子教会他们。

环境需求:

       myeclipse8.5

       jdk1.6

       spring3.2

工程截图:

      

代码部分:

公务员.java

 

package 紫禁城.内务府.登记处;

public enum 公务员 {

	男,
	女,
	太监;
	
}

敬事监管.java

 

 

package 紫禁城.内务府.监管处;

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;

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

import 紫禁城.内务府.敬事房.膑.太监膑;

@Aspect
@Component
public class 敬事监管 {

	@Pointcut("execution(public * 紫禁城.内务府.敬事房.利器库..*.军刺切(..))")
	public void 监管员(){
		
	}
	
	@Before("监管员()")
	public void 敬事前(){
		System.out.println("敬事前:---------准备下刀... ...");
	}
	
	@After("监管员()")
	public void 敬事后(){
		System.out.println("敬事后:---------切除完成... ...");
	}
	
	@SuppressWarnings("deprecation")
	@Around("监管员()")
	public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
        
		System.out.println("待切身份:"+pjp.getArgs()[0]);
		System.out.println("执行工具:"+pjp.getSignature().getName());
		
		//获得传递对象,并做处理
		太监膑 太监 = (太监膑) pjp.getArgs()[0];
		SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd");
		太监.set敬事日期(timeFormat.format(new Date()));
		
		//此处可以传递更改后的参数
		Object obj = pjp.proceed(new Object[]{太监});
		
		return obj;
		
	}
	
	
	/** 
     * 根据类和方法名得到方法 
     */  
    public Method getMethodByClassAndName(Class c , String methodName){  
        Method[] methods = c.getDeclaredMethods();  
        for (Method method : methods) {  
            if(method.getName().equals(methodName)){  
                return method ;  
            }  
        }  
        return null;  
    }  
}

太监膑.java

 

 

package 紫禁城.内务府.敬事房.膑;

public class 太监膑 {

	private String 姓名;
	private String 年龄;
	private String 性别;
	private String 敬事日期 = "";

	public String get姓名() {
		return 姓名;
	}

	public void set姓名(String 姓名) {
		this.姓名 = 姓名;
	}

	public String get年龄() {
		return 年龄;
	}

	public void set年龄(String 年龄) {
		this.年龄 = 年龄;
	}

	public String get性别() {
		return 性别;
	}

	public void set性别(String 性别) {
		this.性别 = 性别;
	}

	public String get敬事日期() {
		return 敬事日期;
	}

	public void set敬事日期(String 敬事日期) {
		this.敬事日期 = 敬事日期;
	}

	@Override
	public String toString() {
		return "太监膑 [姓名=" + 姓名 + ", 年龄=" + 年龄 + ", 性别=" + 性别 + ", 敬事日期=" + 敬事日期
				+ "]";
	}

}


切除器具

package 紫禁城.内务府.敬事房.利器库;

import org.springframework.stereotype.Component;

import 紫禁城.内务府.敬事房.膑.太监膑;
import 紫禁城.内务府.登记处.公务员;

/**
 * 
 * @author fuzhengwei
 * 
 * 相当于dao层,刀层
 */
@Component("切除")
public class 切除器具 {
	
	/**
	 * 军刺切
	 * 把一个好好的小伙变成太监
	 */
	public 太监膑 军刺切(太监膑 太监){
		
		太监.set性别(公务员.太监.name());
		System.out.println("。。。啊 ... ...老子被切了!");
		return 太监;
	}
	
	
}

太监刑.java

 

 

package 紫禁城.内务府.敬事房.刑房处;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import 紫禁城.内务府.敬事房.利器库.切除器具;
import 紫禁城.内务府.敬事房.膑.太监膑;

/**
 * 
 * @author fuzhengwei
 * 
 * 专为阉割太监所设立
 */
@Component("太监刑")
public class 太监刑 {

	private 切除器具 切除;
	
	
	public 切除器具 get切除() {
		return 切除;
	}

	@Resource(name="切除") 
	public void set切除(切除器具 切除) {
		this.切除 = 切除;
	}

	public 太监膑 执行切除(太监膑 太监){
		return 切除.军刺切(太监);
	}
	
}


张三丰掌刀.java

 

 

package 紫禁城.内务府.敬事房.掌刀;

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

import 紫禁城.内务府.敬事房.刑房处.太监刑;
import 紫禁城.内务府.敬事房.膑.太监膑;
import 紫禁城.内务府.登记处.公务员;

/**
 * 
 * @author fuzhengwei
 *
 * 掌刀人负责切
 * 
 */
public class 张三丰掌刀 {

	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("皇太极.xml");
		
		太监刑 太监行刑 = ctx.getBean("太监刑",太监刑.class);

		太监膑 太监 = new 太监膑();
		太监.set姓名("小德张");
		太监.set年龄("9");
		太监.set性别(公务员.男.name());
		
		太监 = 太监行刑.执行切除(太监);
		
		System.out.println("\r\n切除状态:"+太监);
	}

}


皇太极.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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	">

	<context:annotation-config/>
	<!-- 自动扫描(自动注入) -->
	<context:component-scan base-package="紫禁城.内务府" />
	
	<aop:aspectj-autoproxy/>
</beans>


测试运行:

 

 

源码下载:

https://github.com/fuzhengwei/javaee_test_springaop

小傅哥 CSDN认证博客专家 ASM 设计模式 面经手册
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值