Spring的AspectJ的AOP

Spring的AspectJ的AOP

基于注解

第一步:引入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--AOP、AspectJ


下一篇:Spring-AOP的学习