该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文件和Java类复制到包中即可通过测试类进行测试。
Spring的applicationContext.xml代码:
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
Dao接口代码:
package cn.muc.spring.demo3;
public interface CustomerDao {
public void save();
public String delete();
public void update();
public void find();
}
Dao实现类代码:
package cn.muc.spring.demo3;
public class CustomerDaoImpl implements CustomerDao {
@Override
public void save() {
System.out.println("保存方法被调用了。。。");
}
@Override
public String delete() {
System.out.println("删除方法被调用了。。。");
return "后置通知获得方法返回值";
}
@Override
public void update() {
System.out.println("更新方法被调用了。。。");
}
@Override
public void find() {
System.out.println("查找方法被调用了。。。");
int a = 1 / 0;
}
}
切面类代码:
package cn.muc.spring.demo3;
import org.aspectj.lang.ProceedingJoinPoint;
/**
* 切面类
* @author xufaye
*
*/
public class MyAspectXML {
/**
* 前置通知
*/
public void checkPri() {
System.out.println("权限校验==================");
}
/**
* 后置通知:可以获得方法返回值(通过传入对象类型的参数)
*/
public void writeLog(Object result) {
System.out.println("日志记录===============" + result);
}
/**
* 环绕通知:比如可以用于性能监控
* @throws Throwable
*/
public Object watch(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕前通知=========");
Object obj = joinPoint.proceed();
System.out.println("环绕后通知=========");
return obj;
}
/**
* 异常抛出通知
*/
public void afterTrowing(Throwable ex) {
System.out.println("异常抛出通知=========并获得异常信息:" + ex.getMessage());
}
/**
* 最终通知:无论有没有异常都会执行,相当于finally代码块中的内容
*/
public void after() {
System.out.println("最终通知===========");
}
}
测试类代码:
package cn.muc.spring.demo3;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* AOP入门
* @author xufaye
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 {
@Resource(name="customerDao")
private CustomerDao customerDao;
@Test
public void demo1() {
customerDao.save();
customerDao.delete();
customerDao.update();
customerDao.find();
}
}
Java中AOP开发配置入门案例开发所需引入的jar包
com.springsource.org.aopalliance-1.0.0.jar【AOP联盟】
com.springsource.org.apache.commons.logging-1.1.1.jar【日志包】
com.springsource.org.apache.log4j-1.2.15.jar【日志包】
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar【aspectj】
spring-aop-4.2.4.RELEASE.jar【spring整合AOP包】
spring-aspects-4.2.4.RELEASE.jar【spring整合aspectj包】
spring-beans-4.2.4.RELEASE.jar【spring基础包】
spring-context-4.2.4.RELEASE.jar【spring基础包】
spring-core-4.2.4.RELEASE.jar【spring基础包】
spring-expression-4.2.4.RELEASE.jar【spring基础包】
spring-test-4.2.4.RELEASE.jar【spring整合Junit包】