java相关:Spring AOP中定义切点的实现方法示例
发布于 2020-6-6|
复制链接
摘记: 本文实例讲述了Spring AOP中定义切点的实现方法。分享给大家供大家参考,具体如下:一 配置
```xml
..
本文实例讲述了Spring AOP中定义切点的实现方法。分享给大家供大家参考,具体如下:一 配置
```xml
```
二 切面类SystemArchitecture
```java
package org.crazyit.app.aspect;
import org.aspectj.lang.annotation.*;
@Aspect
public class SystemArchitecture
{
@Pointcut("execution(* org.crazyit.app.service.impl.*.*(..))")
public void myPointcut(){}
}
```
LogAspect
```java
package org.crazyit.app.aspect;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.*;
@Aspect
public class LogAspect
{
// 直接使用SystemArchitecture切面类的myPointcut()切入点
@AfterReturning(returning="rvt"
, pointcut="SystemArchitecture.myPointcut()")
// 声明rvt时指定的类型会限制目标方法必须返回指定类型的值或没有返回值
// 此处将rvt的类型声明为Object,意味着对目标方法的返回值不加限制
public void log(Object rvt)
{
System.out.println("获取目标方法返回值:" + rvt);
System.out.println("模拟记录日志功能...");
}
}
```
三 接口Hello
```java
package org.crazyit.app.service;
public interface Hello {
// 定义一个简单方法,模拟应用中的业务逻辑方法
void foo();
// 定义一个addUser()方法,模拟应用中的添加用户的方法
int addUser(String name, String pass);
}
```
World
```java
package org.crazyit.app.service;
public interface World {
// 定义一个简单方法,模拟应用中的业务逻辑方法
public void bar();
}
```
四 实现类HelloImpl
```java
package org.crazyit.app.service.impl;
import org.springframework.stereotype.Component;
import org.crazyit.app.service.*;
@Component("hello")
public class HelloImpl implements Hello
{
// 定义一个简单方法,模拟应用中的业务逻辑方法
public void foo()
{
System.out.println("执行Hello组件的foo()方法");
}
// 定义一个addUser()方法,模拟应用中的添加用户的方法
public int addUser(String name , String pass)
{
System.out.println("执行Hello组件的addUser添加用户:" + name);
if(name.length() 10)
{
throw new IllegalArgumentException("name参数的长度必须大于3,小于10!");
}
return 20;
}
}
```
WorldImpl
```java
package org.crazyit.app.service.impl;
import org.springframework.stereotype.Component;
import org.crazyit.app.service.*;
@Component("world")
public class WorldImpl implements World {
// 定义一个简单方法,模拟应用中的业务逻辑方法
public void bar() {
System.out.println("执行World组件的bar()方法");
}
}
```
五 测试类
```java
package lee;
import org.springframework.context.*;
import org.springframework.context.support.*;
import org.crazyit.app.service.*;
public class BeanTest
{
public static void main(String[] args)
{
// 创建Spring容器
ApplicationContext ctx = new
ClassPathXmlApplicationContext("beans.xml");
Hello hello = ctx.getBean("hello" , Hello.class);
hello.foo();
hello.addUser("孙悟空" , "7788");
World world = ctx.getBean("world" , World.class);
world.bar();
}
}
```
六 测试结果
执行Hello组件的foo()方法
获取目标方法返回值:null
模拟记录日志功能...
执行Hello组件的addUser添加用户:孙悟空
获取目标方法返回值:20
模拟记录日志功能...
执行World组件的bar()方法
获取目标方法返回值:null
模拟记录日志功能...