• spring Ioc Aop整合


    之前用DWP项目做spring的IOC,xml总是提示有问题,之后改用maven通过。

    之后将这一块的内容补充。

    仔细考虑一下spring 的IOC是无处不在的,演示Aop也需要依赖spring的IOC。

    spring Aop例子。

    本文例子在http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html基础上进行些许修改,首先项目结构图:

    其次运行结果图:

    最开始的pom文件(property与dependency可以复制)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.spring</groupId>
      <artifactId>mavenAop</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>mavenAop Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.19</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>3.0.5.RELEASE</version>    
        </dependency>    
        
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <version>1.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>mavenAop</finalName>
      </build>
      <properties>
          <springVersion>3.2.5.RELEASE</springVersion>
      </properties>
    </project>

    其次是主类的接口

    package com.dragon.study;
    
    public interface IStudent {
    public void addStudent(String name);
    }

    主类的实现

    package com.dragon.study.Impl;
    import com.dragon.study.IStudent;
    
    public class StudentImpl implements IStudent {
    
    public void addStudent(String name) {
    // TODO Auto-generated method stub
    System.out.println( " 欢迎 " + name + " 你加入Spring家庭! " );
    }
    
    }

    前置、后置、环绕通知

    package com.dragon.Advice;
    
    import java.lang.reflect.Method;
    
    import org.springframework.aop.MethodBeforeAdvice;
    
    public class BeforeAdvice implements MethodBeforeAdvice {
    
        public void before(Method arg0, Object[] arg1, Object arg2)
                throws Throwable {
            // TODO Auto-generated method stub
             System.out.println( " 这是BeforeAdvice类的before方法. " );
        }
    
    }
    package com.dragon.Advice;
    
    import java.lang.reflect.Method;
    
    import org.springframework.aop.AfterReturningAdvice;
    
    public class AfterAdvice implements AfterReturningAdvice {
    
        public void afterReturning(Object arg0, Method arg1, Object[] arg2,
                Object arg3) throws Throwable {
            // TODO Auto-generated method stub
             System.out.println("这是AfterAdvice类的afterReturning方法.");
        }
    
    }
    package com.dragon.Advice;
    
    import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;
    
    public class CompareInterceptor implements MethodInterceptor {
    
        public Object invoke(MethodInvocation invocation) throws Throwable {
            // TODO Auto-generated method stub
            Object result = null;
             String stu_name = invocation.getArguments()[0].toString();
             if ( stu_name.equals("dragon")){
                 //如果学生是dragon时,执行目标方法,
                  result= invocation.proceed();
                  
             } else{
                 System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");
             }
            
              return result;
        }
    
    }

    其次进行bean文件配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
        xmlns:cache="http://www.springframework.org/schema/cache"
        xsi:schemaLocation="
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/jdbc
        http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">
        
     <bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean>
     <bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean>
     <bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean>
     <bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean>
    
    <bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
        <value>com.dragon.study.IStudent</value>
      </property>
      <property name="interceptorNames">
        <list>
         <value>beforeAdvice</value>
         <value>afterAdvice</value>
        <value>compareInterceptor</value>  
        </list>
      </property>
      <property name="target">
        <ref bean="studenttarget"/>
      </property>
    
    </bean>
    
    
    
    
    </beans>

    最后测试类

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.dragon.study.IStudent;
    
    public class Test {
    
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    ApplicationContext ctx =new ClassPathXmlApplicationContext("bean.xml");
    IStudent person = (IStudent)ctx.getBean("student");
    person.addStudent("drasdfgon");
    }
    
    }
  • 相关阅读:
    《梦段代码》阅读笔记03
    用户场景
    冲刺!
    冲刺!
    周总结8
    冲刺!
    冲刺!
    PMS权限管理和鉴权过程
    PMS构造函数以及apk如何扫描
    PMS的学习之旅
  • 原文地址:https://www.cnblogs.com/yukino/p/4003465.html
Copyright © 2020-2023  润新知