Chinaunix首页 | 论坛 | 博客
  • 博客访问: 218522
  • 博文数量: 11
  • 博客积分: 2511
  • 博客等级: 少校
  • 技术积分: 555
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-31 22:52
文章分类

全部博文(11)

文章存档

2009年(1)

2008年(10)

我的朋友

分类: Java

2008-06-06 11:47:55

最近闲着没事,就把之前自己弄的spring的aop给看了一下,呵呵用的是jdk1.4的版本,这个例子只是用aop做了一个数据库打开和关闭的拦截。
1.定义一个数据库链接类如下:
    package db;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

public class ConnectionManager {

    private DataSource datasource;
   
    public void setDatasource(DataSource ds){
        this.datasource = ds;
    }
    public  Connection getCon(){
        Connection con = null;
        try {
            con = this.datasource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
}

2定义数据库开启的前置before 如下:
package db;

import java.lang.reflect.Method;

import manager.DaoManager;

import org.springframework.aop.MethodBeforeAdvice;

public class BeginConnManager implements MethodBeforeAdvice {

    private ConnectionManager cm;
    public void setCm(ConnectionManager cm){this.cm = cm;}
    public void before(Method method, Object[] params, Object obj) throws Throwable {
        DaoManager dm = (DaoManager)obj;
        System.out.println(cm.getCon());
        dm.setConnection(cm.getCon());
        System.out.println("[INFO] connection is opened for "+method.getName());
    }

}

3定义后置增强after如下:
package db;

import java.lang.reflect.Method;

import manager.DaoManager;

import org.springframework.aop.AfterReturningAdvice;

public class AfterConnManager implements AfterReturningAdvice{

    public void afterReturning(Object returnobj, Method method, Object[] params, Object obj) throws Throwable {
        DaoManager dm = (DaoManager)obj;
        dm.getConnection().close();
        System.out.println("[INFO] connection is closed for "+method.getName());
    }

}

4辅助类:
package manager;

import java.sql.Connection;


public class DaoManager {

    private Connection con ;
    public void setConnection(Connection cm){
        this.con = cm;
    }
    public Connection getConnection(){
        return con;
    }
}



application.xml如下:



    xmlns=""
    xmlns:xsi=""
    xsi:schemaLocation=" /spring-beans-2.0.xsd">
   
            class="org.apache.commons.dbcp.BasicDataSource">
       
            org.gjt.mm.mysql.Driver
       

       
            jdbc:mysql://localhost:3306/kaoshi
       

       
            root
       

       
           
       

   

   
   
       
           
       

   

   
       
           
       

   

   
   
   
       
           
       

       
            .*do.*
       

   

   
       
           
       

       
            .*do.*
       

   

   
   
   

   

开始测试了,写个测试类如下:
package manager;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class GetconnectTest extends DaoManager {
   
    public void doSearchAll(){
        try {
            Statement st = getConnection().createStatement();
            ResultSet rs = st.executeQuery("select * from admin");
            if(rs.next()){
                System.out.println("ok!");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
   
    public static void main(String args[]){
        ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
        GetconnectTest gt = (GetconnectTest) ctx.getBean("contest");
        gt.doSearchAll();
    }
}


阅读(1329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~