AOP切面编程一 原

第一步:定义业务层接口与实现

1.定义接口

package group.esperanto.service;

public interface IMessageService {
    public boolean doRemove(String mid);
}

2.定义实现类

package group.esperanto.service.impl;

import org.apache.log4j.Logger;
import group.esperanto.service.IMessageService;

public class MessageServiceImpl implements IMessageService {

	@Override
	public boolean doRemove(String mid) {
		Logger.getLogger(IMessageService.class).info("[业务层]---执行删除ID = "+mid);
		return false;
	}

}

第二步:定义AOP程序处理类

package group.esperanto.proxy;

import org.apache.log4j.Logger;

public class ServiceProxy {
     public void BeforeInvoke(){
    	 Logger.getLogger(ServiceProxy.class).info("[ServiceProxy - Before]"); 
     }
     public void AfterInvoke(){
    	 Logger.getLogger(ServiceProxy.class).info("[ServiceProxy - Before]"); 
     }
}

第三步:在applicationContext中进行配置

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:task="http://www.springframework.org/schema/task"  
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
		http://www.springframework.org/schema/task  http://www.springframework.org/schema/task/spring-task-4.1.xsd ">
     <bean id="serviceProxy" class="group.esperanto.proxy.ServiceProxy" />
     <bean id="messageServiceImpl" class="group.esperanto.service.impl.MessageServiceImpl"/>
     <!-- 针对AOP的处理进行配置 -->
     <aop:config>
        <!-- 定义业务操作切入点 -->
       <aop:pointcut expression="execution(* group.esperanto.service..*.*(..))" id="messagePoint"/>
        <!-- 定义具体操作到切入点的方法上 -->
       <aop:aspect ref="serviceProxy">
             <!-- 引用外部定义好的切入点 -->
           <aop:before method="beforeInvoke" pointcut-ref="messagePoint"/>
              <!-- 内部定义切入点 -->
           <aop:after method="afterInvoke" pointcut="execution(* group.esperanto.service..*.*(..))"/>
       </aop:aspect>
     </aop:config>
</beans>

第四步:测试调用

package group.esperanto.test;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import group.esperanto.service.IMessageService;

public class Task {
	public static void main(String[] args) {
	  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      IMessageService messageService = ctx.getBean("messageServiceImpl",IMessageService.class);
      Logger.getLogger(Task.class).info(messageService.doRemove("110"));
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

Spring Boot入门

Spring Boot入门: 使用IDEA创建Spring Boot 项目: 选择 ? 勾选Web ? 生成项目结构: ? 例子: package com.ex...

2954
来自专栏全栈架构

Spring Boot 与 Kotlin 处理Web表单提交

我们在做web开发的时候,肯定逃不过表单提交,这篇文章通过Spring Boot使用Kotlin 语言 创建和提交一个表单。

762
来自专栏Dawnzhang的开发者手册

@Controller和@RestController的区别?

1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalRes...

4973
来自专栏增长技术

Maven部署Web项目到Tomcat的配置

Maven自动部署实际上调的是Tomcat安装目录下的manager功能。而为了能正常访问http://localhost:8080/manager页面,我们需...

8063
来自专栏web编程技术分享

用SpringBoot搭建简单电商项目 01

8648
来自专栏一个会写诗的程序员的博客

Spring Boot 2.0 内嵌 Tomcat 定制 : WebServerFactoryCustomizer

Spring Boot 2.0 内嵌 Tomcat 定制 : WebServerFactoryCustomizer

2352
来自专栏北京马哥教育

性能测试与持续集成(JMeter+Jenkins)

目的 将性能测试与持续集成挂接起来 性能测试: JMeter 持续集成: Jenkins JMeter 下载JMeter,官网: http://jmeter.a...

4795
来自专栏开发与安全

About Cache Coherence, Atomic Operation, Memory Ordering, Memory Barrier, Volatile

写这篇文章的起因是看到何登成博士发的一个微博问题,如下: ? 自己想不太明白,顺下找了他以前分享的一些资料和其他人的博客阅读,在这里做个笔记,内容主要来自何博的...

3030
来自专栏后台及大数据开发

springBoot系列教程05:fastjson的集成、配置及使用

springBoot自带的json用着不太习惯,已习惯了fastJSON,下面介绍下fastjson的配置

1261
来自专栏技术小黑屋

获取shell脚本所在目录

前几天写的七牛的参赛demo,用bash写了一个便捷安装的脚本,涉及到了路径相关的判断,从stackoverflow,加上自己的实践整理一下。

1022

扫码关注云+社区

领取腾讯云代金券