aspectj动态代理

笔记之用....

UserService

package com.spring.test;

import org.springframework.stereotype.Component;

@Component
public interface UserService {
	
	public void createUser();
	
	public void deleteUser();
	
	public void updateUser(int id);

}


实现类UserDao

package com.spring.test;

import org.springframework.stereotype.Component;

@Component
public class UserDao implements UserService {

	public void createUser() {
		System.out.println("user saved...");

	}
	
	public void deleteUser(){
		System.out.println("delete user...");
	}
	
	public void updateUser(int id){
		System.out.println("update user...");
	}

}



配置文件

<?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: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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd ">

		<context:annotation-config></context:annotation-config>
		<context:component-scan base-package="com.spring.test,com.spring.log"></context:component-scan>
		<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

</beans>


要切入的

package com.spring.log;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogInterceptor {
	
	@Before(value="execution (* com.spring.test.*.*(..))")
	public void beforeMethod(JoinPoint point){
		System.out.println("方法执行前执行");
		 System.out.println(point.getTarget()+"类的"+point.getSignature().getName()+"方法执行!!!");  
	}
	@After(value="execution (* com.spring.test.*.*(..))")
	public void afterMethod(JoinPoint point){
		System.out.println("方法执行后执行");
		 System.out.println(point.getTarget()+"类的"+point.getSignature().getName()+"方法执行完毕!!!");  
	}

}


Junit测试

package com.junit.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.test.UserService;


public class Test {
	
	@org.junit.Test
	public void Test(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService service = (UserService) ctx.getBean("userDao");
		service.createUser();
	}
	

}


测试结果:

方法执行前执行
com.spring.test.UserDao@1977b9b类的createUser方法执行!!!
user saved...
方法执行后执行
com.spring.test.UserDao@1977b9b类的createUser方法执行完毕!!!

猜你喜欢

转载自shangxun.iteye.com/blog/1935321