码迷,mamicode.com
首页 > 其他好文 > 详细

AOP编程

时间:2018-02-06 01:11:50      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:有关   manager   pack   handle   interface   toc   art   throws   dbcp   

package com.itheima.util;

import java.sql.Connection;
import java.sql.SQLException;
//封装了所有与事务有关的方法
public class TransactionManager {
    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    public static Connection getConnection(){
        Connection conn = tl.get();
        if(conn==null){//从当前线程中获取链接
            conn = DBCPUtil.getConnection();
            tl.set(conn);
        }
        return conn;
    }
    public static void startTransaction(){
        try {
            Connection conn = getConnection();
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void rollback(){
        try {
            Connection conn = getConnection();
            conn.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void commit(){
        try {
            Connection conn = getConnection();
            conn.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void release(){
        try {
            Connection conn = getConnection();
            conn.close();
            tl.remove();//从当前线程中解绑。  与服务器实现有关:服务器采用线程池。
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
package com.itheima.util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.itheima.service.BusinessService;
import com.itheima.service.impl.BusinessServiceImpl;
//AOP
public class BeanFactory {
    public static BusinessService getBusinessService(){
        final BusinessService s = new BusinessServiceImpl();
        
        BusinessService proxyS = (BusinessService)Proxy.newProxyInstance(s.getClass().getClassLoader(), 
                s.getClass().getInterfaces(), 
                new InvocationHandler() {
                    public Object invoke(Object proxy, Method method, Object[] args)
                            throws Throwable {
                        try {
                            TransactionManager.startTransaction();
                            Object rtValue = method.invoke(s, args);
                            return rtValue;
                        } catch (Exception e) {
                            TransactionManager.rollback();
                            throw new RuntimeException(e);
                        } finally {
                            TransactionManager.commit();
                            TransactionManager.release();
                        }
                    }
                });
        
        return proxyS;
    }
}
package com.itheima.service;

public interface BusinessService {
    /**
     * 转账
     * @param sourceAccountName 转出账户
     * @param targetAccontName 转入账户
     * @param money 交易金额
     */
    void transfer(String sourceAccountName,String targetAccontName,float money);
}
package com.itheima.service.impl;


import com.itheima.dao.AccountDao;
import com.itheima.dao.impl.AccountDaoImpl;
import com.itheima.domain.Account;
import com.itheima.service.BusinessService;

//业务层控制事务
public class BusinessServiceImpl implements BusinessService {
    private AccountDao dao = new AccountDaoImpl();
    public void transfer(String sourceAccountName, String targetAccontName,
            float money) {
        Account sAccount = dao.findByName(sourceAccountName);
        Account tAccount = dao.findByName(targetAccontName);
        sAccount.setMoney(sAccount.getMoney() - money);
        tAccount.setMoney(tAccount.getMoney() + money);
        dao.updateAcount(sAccount);
//         int i=1/0;
        dao.updateAcount(tAccount);
    
    }

}
package com.itheima.view;

import com.itheima.service.BusinessService;
import com.itheima.service.impl.BusinessServiceImpl;
import com.itheima.util.BeanFactory;

public class Client {

    public static void main(String[] args) {
        BusinessService s = BeanFactory.getBusinessService();
        s.transfer("aaa", "bbb", 100);
    }

}

 

AOP编程

标签:有关   manager   pack   handle   interface   toc   art   throws   dbcp   

原文地址:https://www.cnblogs.com/xiarongjin/p/8419838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!