工作后好多师弟师妹问我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
标签:师妹,String,spring,太监,敬事,切除,aop,import,public 来源: https://blog.51cto.com/u_14943622/2844501