文档章节

Spring AOP样例

BK灬
 BK灬
发布于 2017/05/19 17:51
字数 390
阅读 24
收藏 1

接口

public interface Person {

	public void run();

	public void walk();
}

实现类

public class Student implements Person {

	@Override
	public void run() {
		System.out.println("Student is running!");
	}

	@Override
	public void walk() {
		System.out.println("Student is walking!");
	}

}
public class Teacher implements Person {

	@Override
	public void run() {
		System.out.println("Teacher is running!");
	}

	@Override
	public void walk() {
		System.out.println("Teacher is walking!");
	}

}

通知方法

public class TimeHandler {

	public void printTime() {
		System.out.println("CurrentTime:" + System.currentTimeMillis());
	}

}
public class LogHandler {

	public void LogBefore()
    {
        System.out.println("Log before method");
    }
    
    public void LogAfter()
    {
        System.out.println("Log after method");
    }

}

启动器

public class PersonExample {

	public static void main(String[] args) {
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("aop.xml");
	
		Person t = (Person)ctx.getBean("teacher");
		Person s = (Person)ctx.getBean("student");
		t.run();
		System.out.println();
		t.walk();
		System.out.println();
		s.run();
		System.out.println();
		s.walk();
	}

}

配置文件

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
        
        <!-- bean注入 -->
        <bean id="student" class="com.ninemax.ak.spring.aop.Student" />
        <bean id="teacher" class="com.ninemax.ak.spring.aop.Teacher" />
        <bean id="timeHandler" class="com.ninemax.ak.spring.aop.TimeHandler" />
        <bean id="logHandler" class="com.ninemax.ak.spring.aop.LogHandler" />
        
        <!-- AOP配置 -->
        <aop:config>
        	<!-- 切面 :类-->
        	<aop:aspect id="time" ref="logHandler" order="2">
        		<!-- 切入点:对连接点进行拦截的定义 -->
        		<aop:pointcut expression="execution(* com.ninemax.ak.spring.aop.Person.run*(..))" id="printLog"/>
        		<!-- 通知:拦截到连接点后要执行的方法 -->
        		<aop:before method="LogBefore" pointcut-ref="printLog"/>
        		<aop:after method="LogAfter" pointcut-ref="printLog"/>
        	</aop:aspect>
        	<!-- 切面 :类-->
        	<aop:aspect id="time" ref="timeHandler" order="1">
        		<!-- 切入点:对连接点进行拦截的定义 -->
        		<aop:pointcut expression="execution(* com.ninemax.ak.spring.aop.Person.walk*(..))" id="addAllMethod"/>
        		<!-- 通知:拦截到连接点后要执行的方法 -->
        		<aop:before method="printTime" pointcut-ref="addAllMethod"/>
        		<aop:after method="printTime" pointcut-ref="addAllMethod"/>
        	</aop:aspect>
        </aop:config>
        
</beans>

运行结果

Log before method
Teacher is running!
Log after method

CurrentTime:1495187549752
Teacher is walking!
CurrentTime:1495187549752

Log before method
Student is running!
Log after method

CurrentTime:1495187549753
Student is walking!
CurrentTime:1495187549753
详细博客地址:http://www.cnblogs.com/hongwz/p/5764917.html

 

© 著作权归作者所有

上一篇: Spring IOC样例
下一篇: 初识Spring
BK灬

BK灬

粉丝 46
博文 343
码字总数 142562
作品 0
朝阳
后端工程师
私信 提问
通过自定义注解,和Spring 的aop 实现插入业务日志的功能

首先当然是定义一个注解类型了: 在这个注解中我定义了两个参数:一个是content:这个是日志的主要内容,一个是operType : 日志类型。 其中MethodLogType 是我自己定义的一个枚举类: 下面就要...

中国扛把子
2018/08/27
0
0
Spring之 Aspect Oriented Programming with Spring

1. Concepts Aspect-Oriented Programming (AOP) complements OOP by providing another way of thinking about program structure. While OO decomposes applications into a hierarchy of ......

leodaxin
2018/07/29
0
0
什么是Spring的命名空间及使用Spring 的命名空间p 装配属性

这个就要从XML说了,Spring的配置管理可以利用XML方式进行配置,而XML里面就有命名空间这个概念。。实际上就和标签的意思有点像 你给一个命名空间以后,这个XML文件里面就可以用那个命名空间...

随智阔
2014/04/02
0
0
补习系列-springboot 实现拦截的五种姿势

目录 简介 姿势一、使用 Filter 接口 1. 注册 FilterRegistrationBean 2. @WebFilter 注解 姿势二、HanlderInterceptor 姿势三、@ExceptionHandler 注解 姿势四、RequestBodyAdvice/Respons...

美码师
2018/08/18
0
0
主键不是id的实体使用insertUseGeneratedKeys方法问题

@Liuzh_533 你好,想跟你请教个问题: 看了你在 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvide......

rexxx
2017/05/27
158
1

没有更多内容

加载失败,请刷新页面

加载更多

如何远程调试部署在CloudFoundry平台上的nodejs应用

网络上关于如何本地调试nodejs应用的教程已经很多了,工具有Chrome开发者工具,Visual Studio Code,和nodejs周边的一些小工具等等。 在实际情况中,我们可能遇到本地运行良好,但是部署到C...

JerryWang_SAP
33分钟前
5
0
微信扫码访问网站调用默认浏览器打开如何实现?

我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 “ 已停止访问该网页 ”,无论是聊天框也一样。说是系统检测到您的网...

明尼苏达哈士奇
41分钟前
3
0
一份Java程序员进阶架构师的秘籍,你离架构师还差多远

一、如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并...

我最喜欢三大框架
49分钟前
2
0
想说再见不容易,win7最新市占率依然超36%

微软正在通过努力让Windows 7用户升级至Windows 10,不过从目前的市占率来看,他们还是要加把劲了。 据最新的市场份额看,Windows 10在本月的市场份额有所提升,从43.62%增长到44.10%。另一...

linuxCool
今天
6
0
SQL的优化

对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 对查询进行优化,要尽量避免全表扫描,首先应考虑在进行条件判断的字段上创建了索引。 应尽量避...

咸鱼-李y
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部