首页 > 代码库 > spring Ioc Aop整合

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 stubSystem.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 stubApplicationContext ctx =new ClassPathXmlApplicationContext("bean.xml");IStudent person = (IStudent)ctx.getBean("student");person.addStudent("drasdfgon");}}

spring Ioc Aop整合