zoukankan      html  css  js  c++  java
  • spring aop 之xml

    1、类库

    2.aop概念

      

    一个切面可以有多个切点

    3.在方法前后进行aop的测试代码

    3.1aop.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <bean id="audience" class="com.lzp.aop.Audience" />
        <bean class="com.lzp.aop.Guitar" id="guitar">
            <constructor-arg name="name" value="吉他"></constructor-arg>
        </bean>
        <bean id="eddie" class="com.lzp.aop.Instrumentalist">
            <property name="instrument" ref="guitar" />
        </bean>
        <bean id="testPerformer" class="com.lzp.aop.TestPerformer"></bean>
    
    
    
        <bean id="logger" class="com.lzp.aop.WriterLogger" />
    
        <bean id="loan" class="com.lzp.aop.TestLoan" />
        <bean id="person" class="com.lzp.aop.Person">
            <constructor-arg name="name" value="小名"></constructor-arg>
        </bean>
    
    
        <aop:config>
            <!--参数执行时间点 -->
            <aop:aspect ref="audience">
                <aop:pointcut expression="execution(* com.lzp.aop.Performer.perform(..))"
                    id="performerPointCut" />
                <aop:before pointcut-ref="performerPointCut" method="takeSeats" />
    
    
                <aop:before pointcut-ref="performerPointCut" method="turnOffCellPhones" />
    
    
                <aop:after-returning pointcut-ref="performerPointCut"
                    method="applaud" />
    
    
                <aop:after-throwing pointcut-ref="performerPointCut"
                    method="demandRefund" />
    
            </aop:aspect>
            <!-- 捕获带参数的方法执行 -->
            <aop:aspect ref="logger">
                <aop:pointcut
                    expression="execution(* com.lzp.aop.Loan.transfer(com.lzp.aop.Person)) and args(person)"
                    id="performerPointCut2" />
                <aop:before method="Log" pointcut-ref="performerPointCut2"
                    arg-names="person" />
            </aop:aspect>
        </aop:config>
        <!--<end id="audience_aspect" /> -->
    
    </beans>

    3.2 类和接口

    //Instrument 
    public abstract class Instrument {
    
        public Instrument(String name) {
            this.name = name;
        }
    
        public String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public abstract void play();
    }
    //Performer 
    public interface Performer {
        void perform() throws PerformanceException;
    
    }
    
    //Instrumentalist 
    public class Instrumentalist implements Performer {
        public void perform() throws PerformanceException {
            instrument.play();
        }
    
        private Instrument instrument;
    
        public void setInstrument(Instrument instrument) {
            this.instrument = instrument;
        }
    
    //Guitar 
    public class Guitar extends Instrument {
        public Guitar(String name) {
            super(name);
        }
    
        public void play() {
            System.out.println(name + "Strum strum strum");
        }
    }
    
        public Instrument getInstrument() {
            return instrument;
        }
    
    }

    3.3mainTest

    ApplicationContext context = new ClassPathXmlApplicationContext(
                    "aop.xml");
            
            /*   Performer performer = (Performer) context.getBean("eddie");
               
               performer.perform();*/

    4.获取方法传参的aop测试

    4.1xml同上

    4.2类和接口代码

    public class Person {
        private String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
    }
    public interface Loan {
        void transfer(Person person);
    }
    public class TestLoan implements Loan {
    
        @Override
        public void transfer(Person person) {
     
        } 
    }

    public
    interface Logger { void Log(Person Person); Person getPerson(); }
    public class WriterLogger implements Logger {
        
        private Person person;
        @Override
        public void Log(Person person) {
            // TODO Auto-generated method stub
            System.out.println("拦截带参数测试:person 的name为"+person.getName());
            this.person=person;
        }
    
        @Override
        public Person getPerson() {
            // TODO Auto-generated method stub
            return this.person;
        }
    
     
    
    }

    上面实例主要记录了获取person类型参数的然后进行记录日志。

    mainTest

        ApplicationContext context = new ClassPathXmlApplicationContext(
                    "aop.xml");
            
            /*   Performer performer = (Performer) context.getBean("eddie");
               
               performer.perform();*/
             
    
            Loan loan = (Loan) context.getBean("loan");
            Person person = (Person) context.getBean("person");
            loan.transfer(person);
  • 相关阅读:
    vue element-admin 清空校验
    vue+elementui 动态改变表单必填项
    什么是中台
    项目中遇到的一道算法题
    【解决】Word中公式突然乱码
    【解决】MATLAB报错:此上下文中不支持函数定义,请在代码文件中创建函数。
    【解决】Word打印成PDF出错:%%[ ProductName: Distiller ]%%
    Bike Sharing Analysis(二)- 假设检验方法
    Bike Sharing Analysis(一)- 探索数据
    Spark Structured Streaming(二)实战
  • 原文地址:https://www.cnblogs.com/lzhp/p/5567584.html
Copyright © 2011-2022 走看看