spring学习笔记SpringAopAspect

来源:互联网 发布:ant打包java配置文件 编辑:程序博客网 时间:2024/06/16 09:08
SpringAopAspectJTest.java


package com.lin.test.aspectj;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

/*******************************************************************************

* SpringAopAspectJTest.java Created on 2014年7月23日

* Author: linfenliang

* Description:

* Version: 1.0

******************************************************************************/

public class SpringAopAspectJTest {
ApplicationContext context = new ClassPathXmlApplicationContext("SpringAopAspectJTest_applicationContext.xml");
@Test
public void test() {
AspectJUserDao dao = new AspectJUserDaoImpl();
dao = (AspectJUserDao) context.getBean("aspectJUserDaoImpl");
//dao.userLogin("linfenliang", "123456");
dao.queryUsers("dragon","666666");
}

}
interface AspectJUserDao{
public void userLogin(String username,String password);
public Users queryUsers(String username,String password);

}
class AspectJUserDaoImpl implements AspectJUserDao{
@Override
public void userLogin(String username, String password) {
System.out.println("username:".concat(username).concat(",password:").concat(password));
}

@Override
public Users queryUsers(String username,String password) {
Users u = new Users();
u.setUsername(username);
u.setPassword(password);
u.setAddress("China");
System.out.println(u);
//if(u!=null){
//throw new RuntimeException();
//}
return u;
}
}
@Aspect
@Component
class AspectJUserDaoProxy{
/**
* 定义切入点
*
* void
* @author linfenliang
* @date 2014年7月24日 上午10:58:28
*/
@Pointcut("execution(* com.lin.test.aspectj.AspectJUserDaoImpl.*(..)) && args(username,password)")
void filter(String username,String password){};
@Pointcut("execution(* com.lin.test.aspectj.AspectJUserDaoImpl.*(..))")
void filter2(){};
/**
* 前置通知
*
* void
* @author linfenliang
* @date 2014年7月24日 上午10:56:13
*/
@Before(value="filter(username,password)")
private void checkParamsValid(String username,String password){
System.out.println("ready to check paramters."+username+","+password);
}
@AfterReturning(value="filter2()",returning="users")
private void checkResultValid(Users users){
System.out.println("check result ."+users);
}
@AfterThrowing(pointcut="filter2()",throwing="e")
private void catchException(Throwable e){
System.out.println("exceptionNotice:" +e);
}
@After(value="filter2()")
private void releaseResources(){
System.out.println("release ");
}

@Around(value="filter2()")
private void aroundMethod(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("pjp.proceed() start");
pjp.proceed();
System.out.println("pjp.proceed() end");
}

}
class Users{
private String username;
private String password;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}

SpringAopAspectJTest_applicationContext.xml

<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 启用注解方式注入 -->
<context:annotation-config/>
<!-- 启用自动代理 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 注解扫描路径 -->
<context:component-scan base-package="com.lin.test.aspectj" />

<bean id="aspectJUserDaoImpl" class="com.lin.test.aspectj.AspectJUserDaoImpl"></bean>


</beans>


0 0
原创粉丝点击