您的位置:首页 > 运维架构

12、基于XML方式的AOP

2016-05-22 17:45 351 查看

创建Bean

//首先创建业务接口
package com.codestd.springstudy.aop.xml.service;

public interface UserService {

public void login();

public void logout() throws Exception;

}

//创建实现类
package com.codestd.springstudy.aop.xml.service;

public class UserServiceImpl implements UserService {

@Override
public void login() {
System.out.println("User login");

}

@Override
public void logout() throws Exception {
System.out.println("User logout");
throw new Exception("Exception test");
}

}

//创建切面类
package com.codestd.springstudy.aop.xml;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

public class AspectBean {

public void doAfter(JoinPoint jp){
System.out.println("do after");
}

public void doBefore(JoinPoint jp){
System.out.println("do after");
}

public Object doAround(ProceedingJoinPoint  jp) throws Throwable{
System.out.println("do Around");
Object obj = jp.proceed();
return obj;
}

public void doThrowing(JoinPoint jp,Exception e){
System.out.println(e.getClass().getName()+"|->|"+e.getMessage());
}

}


配置AOP

下面使用XML配置AOP

<bean id="userService" class="com.codestd.springstudy.aop.xml.service.UserServiceImpl" />

<bean id="aspectBean" class="com.codestd.springstudy.aop.xml.AspectBean" />

<aop:config>
<aop:aspect id="aspect" ref="aspectBean">
<aop:pointcut expression="execution(* com.codestd.springstudy.aop.xml.service.*.*(..))" id="servicePointcut"/>
<aop:after method="doAfter" pointcut-ref="servicePointcut" />
<aop:before method="doBefore" pointcut-ref="servicePointcut"/>
<aop:around method="doAround" pointcut-ref="servicePointcut"/>
<aop:after-throwing method="doThrowing" pointcut-ref="servicePointcut" throwing="e"/>
</aop:aspect>
</aop:config>


doAround
方法要有返回值,并且类型是Object,接收的参数类型为
ProceedingJoinPoint


aop:after-throwing
中需要使用
throwing
指定异常的参数名,
doThrowing(JoinPoint jp,Exception e)
中的
e


测试

测试方法如下

package com.codestd.springstudy.aop.xml.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:aop/applicationContext.xml"})
public class UserServiceImplTest {

@Autowired
private UserService userService;

@Test
public void test() throws Exception {
this.userService.login();
this.userService.logout();
}

}


测试结果如下

do after
do Around
User login
do after
do after
do Around
User logout
do after
java.lang.Exception|->|Exception test


使用XML方式配置引入

<aop:config>
<aop:aspect>
<aop:declare-parents types-matching="com.codestd.springstudy.aop.xml.service.UserService+"
implement-interface="com.codestd.springstudy.aop.introductions.Flyable"
default-impl="com.codestd.springstudy.aop.introductions.DefaultFlyable"/>
</aop:aspect>
</aop:config>


测试类如下

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:aop/applicationContext.xml"})
public class UserServiceImplTest {
@Autowired
private Flyable flyable;

@Test
public void test() throws Exception {
this.flyable.fly();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: