美文网首页
2018-10-24 Spring AOP(面向切面编程)

2018-10-24 Spring AOP(面向切面编程)

作者: am330 | 来源:发表于2018-10-24 19:26 被阅读0次

    Spring代理的两种方式

    一、使用配置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">
    <context:component-scan base-package="com.spring">
    <bean id="myPlus" class="com.spring.plus.MyPlus"></bean>
    <aop:config>
        <aop:aspect ref="myPlus"><!--切面:加强类myPlus-->
            <aop:before method="plus" pointcut="execution(public void com.spring.dao.impl.AgentDaoImpl.levelUp(..))"/><!--加强方法puls即表示在调用  AgentDaoImpl 类 中的 levelUp()方法之前会先调用plus方法-->
        </aop:aspect>
    </aop:config>
    </beans>
    

    二、使用注解实现代理

    1、在使用注解之前要在xml配置文档中实现自动代理

    <aop:aspectj-autoproxy></aop:aspectj-autoproxy><!--自动代理标签-->
    

    在切面即加强类中使用@Aspect注解
    如:

    package com.spring.plus;
    
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    
    @Aspect//使之成为切面
    public class MyPlus {
        @Before("execution(void com.spring.dao.impl.AgentDaoImpl.levelUp())")//切点:前置通知,在执行levelUp之前执行puls()方法
        public void plus(){
            System.out.println("一刀999,装备回收秒到账!");
        }
    }
    
    

    AgentDao类

    package com.spring.dao.impl;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.stereotype.Component;
    
    import com.spring.dao.AgentDao;
    import com.spring.plus.MyPlus;
    @Component("agentDao")
    public class AgentDaoImpl implements AgentDao {
        @Override
        public void levelUp() throws Exception {
            System.out.println("this is AgentDao implement class!");
        }
    }
    

    Test 测试类

    @Test
        public void test(){
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            MyPlus p=(MyPlus) context.getBean("myPlus");
            
            try {
                AgentDao agentDao=(AgentDao) context.getBean("agentDao");
                agentDao.levelUp();
            } catch (Exception e) {
                
                e.printStackTrace();
            }
        }
    

    输出结果:
    一刀999,装备回收秒到账!
    this is AgentDao implement class!

    相关文章

      网友评论

          本文标题:2018-10-24 Spring AOP(面向切面编程)

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