一、XML开发
实例化、配置切面等一系列工作都在XML中完成
1、创建目标对象和切入点(就是实现类和方法)
2、切面类(里面都是各种增强通知)
3、XML配置
<!-- 目标对象-->
<bean id="userDao" class="com.hp.dao.impl.UserDaoImpl"></bean>
<!-- 配置-->
<bean id="myAspect" class="com.hp.hple.MyAspect"></bean>
<!-- 织入-->
<aop:config>
<!-- 配置切入点-->
<aop:pointcut id="aaa" expression="execution(* com.hp.dao.impl.UserDaoImpl.show(..))"/>
<aop:pointcut id="bbb" expression="execution(* com.hp.dao.impl.UserDaoImpl.del(..))"/>
<aop:pointcut id="ccc" expression="execution(* com.hp.dao.impl.UserDaoImpl.update(..))"/>
<aop:pointcut id="ddd" expression="execution(* com.hp.dao.impl.UserDaoImpl.add(..))"/>
<!-- 配置切面-->
<aop:aspect ref="myAspect">
<!-- 前置通知 method:切面类中的增强 pointcut-ref:引入要增强的切入点(方法) -->
<aop:before method="fangfaming" pointcut-ref="aaa"></aop:before>
<!-- 后置通知-->
<aop:after-returning method="writeLog" pointcut-ref="bbb" returning="name"></aop:after-returning>
<!-- 环绕通知-->
<aop:around method="arountd" pointcut-ref="ccc"></aop:around>
<!-- 最终通知-->
<aop:after method="finallyer" pointcut-ref="ddd"></aop:after>
<!-- 异常通知-->
<aop:after-throwing method="exec" pointcut-ref="ddd"></aop:after-throwing>
</aop:aspect>
</aop:config>
4、测试
//注解引入配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applictionContext.xml")
public class testDemo {
//注入
@Resource(name = "userDao")
private UserDao userDao;
//直接运行dao层方法即可
@Test
public void test1(){
userDao.show();
userDao.del();
userDao.update();
userDao.add();
}
}
二、注解开发
xml配置文件中开启注解,进行实例化。具体增强在切面类中实现
1、创建目标对象和切入点(就是实现类和方法)
2、XML开始注解并且实例化对象
<!-- 目标对象-->
<bean id="userDao" class="com.hp.dao.impl.UserDaoImpl"></bean>
<!-- 配置-->
<bean id="myAspect" class="com.hp.hple.MyAspect1"></bean>
<!-- 配置切面注解开发-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 注解开发-->
<context:component-scan base-package="com.hp.*"></context:component-scan>
3、切面类创建并且实现具体增强那个方法
1)、表明该类是切面类
@Aspect
public class MyAspect1 {
}
2)、创建增强方法的具体实现
public void fangfaming(){
System.out.println("验证");
}
3)、表明要给那个方法增强
在增强方法上表明
//使用注解开发切入点
//前置通知增强
//里面是要给那个方法增强。所用表达式
@Before("@Before("execution(* com.hp.dao.impl.UserDaoImpl.show (..))")")
public void fangfaming(){
System.out.println("验证");
}
有返回值通知
//与切面通知runing值相同
//有返回值
@AfterReturning(value = "execution(* com.hp.dao.impl.UserDaoImpl.del(..))",returning = "name")
public void writeLog(String name){
System.out.println("记录日志操作"+name+"删除操作");
}
给所有切入点增强
//使用Pointcut表明要增强的切入点
//com.hp.dao.impl.UserDaoImpl.*:*表示所有方法
@Pointcut("execution(* com.hp.dao.impl.UserDaoImpl.* (..))")
public void point(){}
//=====================================
//point()对应。
@Before("point()")
public void fangfaming(){
System.out.println("验证");
}