AOP注解开发、XML开发以及混合开发

一、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("验证");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值