Spring04

作者: BALE_11 | 来源:发表于2018-11-05 09:50 被阅读0次

    使用注解的方式进行代理

    步骤1:在com.hello.dao包下新建一个CarDao接口以及他的实现类CarDaoImpl,具体代码如下:

    CarDao接口:

    package com.hello.dao;

    public interface CarDao {

        public void play();

    }

    CarDaoImpl实现类:

    package com.hello.dao;

    @Component("CarDao")     //注解

    public class CarDaoImpl implements CarDao {

            @Override

            public void play() {

                    System.out.print("我能跑120km/h");

            }

    }

    步骤2:新建一个com.hello.plus包并在包下新建一个名为CarPlus的类

    package com.hello.plus;

    import org.aspectj.lang.annotation.After;

    import org.aspectj.lang.annotation.Aspect;

    @Aspect    //注解

    public class CarPlus {

    @After(value="execution(* *..*.*Impl.play(..))")        //注解

    public void carplus(){

    System.out.println("我能飞上天");

    }

    }

    这上面两个地方使用了注解

    步骤3:在src下新建一个xml文件applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    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/context

            http://www.springframework.org/schema/context/spring-context.xsd

            http://www.springframework.org/schema/aop

            http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 加载自动代理 -->

    <aop:aspectj-autoproxy/>

    <!-- 注解扫描 -->

    <context:component-scan base-package="com.hello"/>

    <!-- 将 MyPlus 类交给 Spring 管理 -->

    <bean id="CarPlus" class="com.hello.plus.CarPlus"></bean>

    <!-- 切面 = 切入点 + 通知

    表达式优化:

    1)省略 public

    2)返回值,不能省略,但可以使用 * 占位

    3)如果中间的路径太多的话,则可以使用 *..*

    4)如果有多个 类/方法 的 前/后缀 是相同的话,也可以使用 前/后缀 作为过滤条件

    5)如果方法中有0 - 多个参数(不确定个数的参数),则可以直接使用两个点表示

    -->

    <!-- <aop:config>

    <aop:aspect ref="carPlus">

    <aop:after method="carplus" pointcut="execution(* *..*.*Impl.play(..))"/>

    </aop:aspect>

    </aop:config> -->

    </beans>

    步骤4:接下来就是测试了,新建一个测试类TestClass

    package com.hello.test;

    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;

    import com.hello.dao.CarDao;

    //执行xml文件

    @ContextConfiguration("classpath:applicationContext.xml")

    @RunWith(SpringJUnit4ClassRunner.class)

    public class TestClass {

    @Autowired

    private CarDao cd;

    @Test

    public void test(){

        cd.play();

    }

    }

    执行applicationContext.xml之后就能通过注解的方式进行代理加强了

    相关文章

      网友评论

          本文标题:Spring04

          本文链接:https://www.haomeiwen.com/subject/qejdtqtx.html