Spring AOP中使用args表达式的方法示例
发布时间:2020-05-26 10:37:25 所属栏目:Java 来源:互联网
导读:Spring AOP中使用args表达式的方法示例 本文实例讲述了Spring AOP中使用args表达式的方法.分享给大家供大家参考,具体如下: 一 配置 ?xml version=1.0 encoding=GBK? beans xmlns=http://www.springframework.org/schema/beans xmlns:xsi=http://www.w3.org/20
|
本文实例讲述了Spring AOP中使用args表达式的方法。分享给大家供大家参考,具体如下: 一 配置
<?xml version="1.0" encoding="GBK"?>
<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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!-- 指定自动搜索Bean组件、自动搜索切面类 -->
<context:component-scan
base-package="org.crazyit.app.service,org.crazyit.app.aspect">
<context:include-filter type="annotation"
expression="org.aspectj.lang.annotation.Aspect" />
</context:component-scan>
<!-- 启动@AspectJ支持 -->
<aop:aspectj-autoproxy />
</beans>
二 切面类
package org.crazyit.app.aspect;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.*;
@Aspect
public class AccessArgAspect
{
// 下面的args(arg0,arg1)会限制目标方法必须有2个形参
@AfterReturning(returning="rvt",pointcut=
"execution(* org.crazyit.app.service.impl.*.*(..)) && args(arg0,arg1)")
// 此处指定arg0、arg1为String类型
// 则args(arg0,arg1)还要求目标方法的两个形参都是String类型
public void access(Object rvt,String arg0,String arg1)
{
System.out.println("调用目标方法第1个参数为:" + arg0);
System.out.println("调用目标方法第2个参数为:" + arg1);
System.out.println("获取目标方法返回值:" + rvt);
System.out.println("模拟记录日志功能...");
}
}
三 接口 Hello
package org.crazyit.app.service;
public interface Hello {
// 定义一个简单方法,模拟应用中的业务逻辑方法
void foo();
// 定义一个addUser()方法,模拟应用中的添加用户的方法
int addUser(String name,String pass);
}
World
package org.crazyit.app.service;
public interface World {
// 定义一个简单方法,模拟应用中的业务逻辑方法
public void bar();
}
四 实现类 HelloImpl
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);
return 20;
}
}
WorldImpl
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()方法");
}
}
五 测试类
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();
}
}
六 测试结果
更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 5个JAVA入门必看的经典实例
- java – spring-data-cassandra存储库的多个密钥空间支持?
- java – 无法让log4j在游戏中运行!框架2.2.1(scala项目)
- 如何在Java 6中使用为Java 7编译的库?
- java – Hamcrest泛型地狱#2:iterableWithSize给出错误“不
- Spring AOP实现Redis缓存数据库查询源码
- 在Java的JDBC使用中设置事务回滚的保存点的方法
- java – 如何对实现Runnable的类进行单元测试
- 详解Spring Cloud负载均衡重要组件Ribbon中重要类的用法
- java – CompletableFuture:异步调用void函数
