分享

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

 小傅哥 2021-12-13

前言介绍:

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

环境需求:

       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./schema/beans"
xmlns:xsi="http://www./2001/XMLSchema-instance" 
xmlns:context="http://www./schema/context"
xmlns:aop="http://www./schema/aop"
xsi:schemaLocation="
http://www./schema/beans
http://www./schema/beans/spring-beans-3.0.xsd
http://www./schema/context
http://www./schema/context/spring-context-3.0.xsd
http://www./schema/aop 
http://www./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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多