1. 搭建环境.导入jar包
AOP需要的jar包
spring.jar
commons-logging.jar
cglib-nodep-2.1_3.jar
aspectjweaver-1.7.4.jar
aspectjrt-1.7.4.jar
2.搭建实体类
搭建实体类
package com.xx.entity;
//目标接口(老板的业务需求)
public interface TargetDao{
//添加
void add(String model);
//查询
void find();
}
package com.xx.entity;
//老板
public class TargetObject implements TargetDao{
public void add(String model) {
System.out.println("session.save("+model+")");
}
public void find() {
System.out.println("session.find(?,?,?)");
}
}
3.配置切面
package com.xx.aspect;
//开启第一个切面: session切面
public class SessionAspect {
//开启session
public void openSession() {
System.out.println("开启session");
}
//关闭session
public void closeSession() {
System.out.println("关闭session");
}
}
配置第二个切面
package com.xx.aspect;
//定义第二个切面:事物切面
public class TransactionAspect {
//开启事务
public void openTransaction() {
System.out.println("开启事务");
}
//提交事务
public void commit() {
System.out.println("提交事务");
}
}
4.写配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/xx/beans"
xmlns:xsi="http://www.w3.org/2001/XMLxx-instance"
xmlns:aop="http://www.springframework.org/xx/aop" xsi:xxLocation="
http://www.springframework.org/xx/beans http://www.springframework.org/xx/beans/spring-beans.xsd
http://www.springframework.org/xx/aop http://www.springframework.org/xx/aop/spring-aop.xsd"> <!-- bean definitions here -->
<!-- 配置切面 -->
<!--配置第一个切面:sessionAspect -->
<bean id="sessionAspect" class="com.lanou.aspect.SessionAspect"/>
<bean id="transactionAspect" class="com.lanou.aspect.TransactionAspect"/>
<!--配置目标代理类 -->
<bean id="targetDao" class="com.lanou.entity.TargetObject"/>
<!--配置AOP -->
<aop:config>
<!--配置切入点 -->
<aop:pointcut expression="execution(* com.lanou.entity.*.*(..))" id="p"/>
<!--引入session切面 -->
<aop:aspect ref="sessionAspect">
<!--前置通知 -->
<aop:before method="openSession" pointcut-ref="p"/>
<!--后置通知 -->
<aop:after-returning method="closeSession" pointcut-ref="p"/>
</aop:aspect>
<!--引入ts切面 -->
<aop:aspect ref="transactionAspect">
<!--前置通知 -->
<aop:before method="openTransaction" pointcut-ref="p"/>
<!--后置通知 -->
<aop:after-returning method="commit" pointcut-ref="p"/>
</aop:aspect>
</aop:config>
</beans>
5.测试
package com.xx.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xx.entity.TargetDao;
public class TestSpring {
public static void main(String[] args) {
//1.初始化Spring容器
ApplicationContext ctx
=new ClassPathXmlApplicationContext("applicationContext.xml");
//2.提取bean
TargetDao td=(TargetDao) ctx.getBean("targetDao");
td.add("user");
}
}