博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring4-AOP通知
阅读量:5797 次
发布时间:2019-06-18

本文共 6549 字,大约阅读时间需要 21 分钟。

本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1910311

1.创建Maven项目,项目名称springdemo50,如图所示

2.配置Maven,修改项目中的pom.xml文件,修改内容如下

  
1.0.0
  
shequ
  
springdemo13
  
0.0.1-SNAPSHOT
    
  
1.7
  
UTF-8
  
UTF-8
  
    
  
  
codelds
  
https://code.lds.org/nexus/content/groups/main-repo
  
  
    
  
  
javax.annotation
  
jsr250-api
  
1.0
  
     
  
org.springframework
  
spring-test
  
4.1.4.RELEASE
  
     
  
junit
  
junit
  
4.10
  
     
  
org.springframework
  
spring-core
  
4.1.4.RELEASE
  
     
        
org.springframework
        
spring-context
        
4.1.4.RELEASE
    
        
        
org.springframework
        
spring-jdbc
        
4.1.4.RELEASE
    
        
        
mysql
        
mysql-connector-java
        
5.1.34
    
         
  

3.在src/main/java下创建实体Bean Customer,包名(com.mycompany.shequ.bean)如图所示

4.实体Bean Customer的内容如下

package com.mycompany.shequ.bean;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Component("customerBean")public class Customer {	private String name;	private String email;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getEmail() {		return email;	}		@Value("#{('dengyunshuo@163.com' matches '^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)" +	"*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$') ? 'dengyunshuo@163.com':'不合法'}")	public void setEmail(String email) {		this.email = email;	}}

5.在src/main/java下创建接口ICustomerDao,包名(com.mycompany.shequ.dao)如图所示

6.ICustomerDao的内容如下

package com.mycompany.shequ.dao;public interface ICustomerDao {	public void showMe();}

7.在src/main/java下创建ICustomerDao的实现类CustomerDaoImpl,包名

8.ICustomerDao的实现类CustomerDaoImpl的内容如下

package com.mycompany.shequ.dao.impl;import com.mycompany.shequ.dao.ICustomerDao;public class CustomerDaoImpl implements ICustomerDao {	public void showMe() {		System.out.println("I'm CustomerDaoImpl");	}}

9.在src/main/java下创建业务Bean ICustomerService接口,包名(com.mycompany.shequ.service)如图所示

10.ICustomerService接口的内容如下

package com.mycompany.shequ.service;public interface ICustomerService {	public void showMe();}

11.在src/main/java下创建业务Bean ICustomerService接口的实现类CustomerServiceImpl,包名(com.mycompany.shequ.service.impl)如图所示

12.业务Bean ICustomerService接口的实现类CustomerServiceImpl的内容如下

package com.mycompany.shequ.service.impl;import com.mycompany.shequ.dao.ICustomerDao;import com.mycompany.shequ.service.ICustomerService;public class CustomerServiceImpl implements ICustomerService {		private ICustomerDao customerDao;	public ICustomerDao getCustomerDao() {		return customerDao;	}	public void setCustomerDao(ICustomerDao customerDao) {		this.customerDao = customerDao;	}	public void showMe() {		customerDao.showMe();	}}

13.在src/main/java下创建前置通知实现类MethodBefore,包名(com.mycompany.shequ.service.impl)如图所示

14.前置通知实现类MethodBefore的内容如下

package com.mycompany.shequ.service.impl;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;/** * 方法执行前通知 * @author Administrator * */public class MethodBefore implements MethodBeforeAdvice {	public void before(Method arg0, Object[] arg1, Object arg2)			throws Throwable {		System.out.println("前置通知被执行");	}}

15.在src/main/java下创建后置通知实现类MethodAfter,包名(com.mycompany.shequ.service.impl)如图所示

16.后置通知实现类MethodAfter的内容如下

package com.mycompany.shequ.service.impl;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;/** * 方法执行完成后通知 * @author Administrator * */public class MethodAfter implements AfterReturningAdvice {	public void afterReturning(Object arg0, Method arg1, Object[] arg2,			Object arg3) throws Throwable {		System.out.println("后置通知被执行");	}}

17.在src/main/java下创建异常通知实现类ThrowException,包名(com.mycompany.shequ.service.impl)如图所示

18.异常通知实现类ThrowException的内容如下

package com.mycompany.shequ.service.impl;import org.springframework.aop.ThrowsAdvice;/** * 抛出异常后通知 * @author Administrator * */public class ThrowException implements ThrowsAdvice {	public void afterThrowing(IllegalArgumentException e) throws Throwable{		System.out.println("异常通知被执行");	}}

19.在src/main/java下创建环绕通知实现类AroundMethod,包名(com.mycompany.shequ.service.impl)如图所示

20.环绕通知实现类AroundMethod的内容如下

package com.mycompany.shequ.service.impl;import java.util.Arrays;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;/** * 环绕通知 * @author Administrator * */public class AroundMethod implements MethodInterceptor {	public Object invoke(MethodInvocation method) throws Throwable {		System.out.println("环绕通知被执行");		System.out.println("方法名称:"+method.getMethod().getName());		System.out.println("方法参数:"+Arrays.toString(method.getArguments()));		Object result = method.proceed();		return result;	}}

21.在src/main/resource下创建核心的配置文件applicationContext.xml,如图所示

22.配置文件applicationContext.xml,如图所示

methodBeforeBean
methodAfterBean
throwExceptionBean
aroundMethodBean

23.在src/test/java下创建测试文件AppTest,包名(com.mycompany.shequ.test)如图所示

24.测试文件AppTest的内容如下

package com.mycompany.shequ.test;import org.junit.Test;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mycompany.shequ.service.ICustomerService;public class AppTest {		@Test	public void beanTest(){	    ConfigurableApplicationContext context = new 	    ClassPathXmlApplicationContext("applicationContext.xml");		ICustomerService customerService = (ICustomerService) 		context.getBean("customerServiceProxy");		customerService.showMe();	}}

25.在测试类AppTest的beanTest方法上右键运行,输出结果如图所示

转载地址:http://khsfx.baihongyu.com/

你可能感兴趣的文章
Android studio开多个窗口引起的问题
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
RedisRepository分享和纠错
查看>>
html语言
查看>>
Unity接入谷歌支付
查看>>
laravel 使用 vue (gulp)
查看>>
QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类...
查看>>
HTTP之二 http 301 和 302的区别
查看>>
从源码看集合ArrayList
查看>>
Gephi
查看>>
git 入门宝典
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
移动web端自定义tap与模拟hover效果
查看>>
[译] Java 8 Nashorn 教程
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
cents 5.8下安装redmine-2.4.5
查看>>