Java教程

Spring的AspectJ的AOP

本文主要是介绍Spring的AspectJ的AOP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Spring的AspectJ的AOP

  • 基于注解
    • 第一步:引入aspectj依赖aop环境jar包.
    • 第二步:编写被增强的类:
    • 第三步:使用AspectJ注解形式:
    • 第四步:创建applicationContext.xml
    • 第五步:测试
    • 附:AspectJ的通知类型:
  • 基于XML
    • 第一步:编写被增强的类:
    • 第二步:定义切面
    • 第三步:配置applicationContext.xml
    • 第四步:测试

基于注解

第一步:引入aspectj依赖aop环境jar包.

 spring-aspects-3.2.0.RELEASE.jar
 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

第二步:编写被增强的类:

@Component
public class OrderDao {
    public void selectData() {
        System.out.println("----------执行selectData方法");
    }
}

第三步:使用AspectJ注解形式:

//切面
@Aspect
@Component
public class MyAspect {
    /*
        1.第一个*号:表示返回类型,*号表示所有的类型。
        2.包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com包、子孙包下所有类的方法。
        3.第二个*号:表示类名,*号表示所有的类。
        4.*(…):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
    */
    @Before("execution(* com.dcits.pms.OrderDao.selectData(..))")
    public void before() {
        System.out.println("----------前置增强....");
    }
}

第四步:创建applicationContext.xml

* 引入aop的约束:
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">
....
<!--开启注解-->
<aop:aspectj-autoproxy proxy-target-class="true"/>

第五步:测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class JUnitTest {
    @Autowired
    private OrderDao orderDao;

    @Test
    public void test() {
       orderDao.selectData();
    }
}

附:AspectJ的通知类型:

@Before 前置通知
@AfterReturning 后置通知
@Around 环绕通知
@AfterThrowing抛出通知
@After 最终final通知
@DeclareParents 引介通知

基于XML

第一步:编写被增强的类:

public class OrderDao {
    public void selectData() {
        System.out.println("----------执行selectData");
    }
}

第二步:定义切面

//切面
public class MyAspect {
    public void before() {
        System.out.println("----------前置增强....");
    }
 }

第三步:配置applicationContext.xml

<bean id="orderDao" class="com.dcits.pms.OrderDao"></bean>
<bean id="myAspect" class="com.dcits.pms.MyAspect"></bean>

<aop:config>
    <!-- 定义切点:对哪些Joinpoint进行拦截 -->
    <aop:pointcut expression="execution(* com.dcits.pms.OrderDao.selectData(..))" id="mypointcut"/>
    <aop:aspect ref="myAspect">
        <!-- 前置通知 -->
        <aop:before method="before" pointcut-ref="mypointcut"/>
    </aop:aspect>
</aop:config>

第四步:测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class JUnitTest {
    @Autowired
    private OrderDao orderDao;

    @Test
    public void test() {
         orderDao.selectData();
    }
}
这篇关于Spring的AspectJ的AOP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!