`
收藏列表
标题 标签 来源
Aop实现方式 --基于API方式 (5)接口与实现类
public interface IStudent {

    public void addStudent(String name);
}

/////////////////////////

public class StudentImpl implements IStudent {

    public void addStudent(String name) {
        System.out.println(" 欢迎  " + name + "  你加入Spring家庭! ");
    }
}
Aop实现方式 --基于API方式 (4)MethodInterceptor拦截器
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class CompareInterceptor implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation) throws Throwable{
        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;
    }
}
Aop实现方式 --基于API方式 (3)前置通知
import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

/**
 * 前置通知:BeforeAdvice.java
 */
public class BeforeAdvice implements MethodBeforeAdvice {

    public void before(Method method, Object[] args, Object target)
            throws Throwable {

        System.out.println(" 这是BeforeAdvice类的before方法. ");

    }
}
Aop实现方式 --基于API方式 (2)后置通知
import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

/**
 * 后置通知:AfterAdvice.java
 */
public class AfterAdvice implements AfterReturningAdvice {

    public void afterReturning(Object returnValue, Method method,
                               Object[] args, Object target) throws Throwable {
        System.out.println("这是AfterAdvice类的afterReturning方法.");
    }

}
Aop实现方式 --基于API方式 (1)配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="beforeAdvice" class="com.dragon.study.BeforeAdvice"></bean>
    <bean id="afterAdvice" class="com.dragon.study.AfterAdvice"></bean>
    <bean id="compareInterceptor" class="com.dragon.study.CompareInterceptor"></bean>
    <bean id="studenttarget" class="com.dragon.study.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>
Aop实现原理 -- Proxy模式 (3)基于反射的动态代理机制
public class DebugProxy implements java.lang.reflect.InvocationHandler
{
    private Object obj;

    public static Object newInstance(Object obj)
    {
        return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                obj.getClass().getInterfaces(), new DebugProxy(obj));
    }

    private DebugProxy(Object obj)
    {
        //Greet接口的實現:GreetImpl
        this.obj = obj;
    }

    //Method m:調用的方法
    //Object[] args:方法要傳入的參數
    public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
    {
        Object result;
        try
        {
            //自定義的處理
            System.out.println("--before method " + m.getName());
            //調用GreetImpl中方法
            result = m.invoke(obj, args);
        }
        catch(InvocationTargetException e)
        {
            throw e.getTargetException();
        }
        catch(Exception e)
        {
            throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
        }
        finally
        {
            System.out.println("--after method " + m.getName());
        }
        return result;
    }

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Greet tmp = new GreetImpl();

        Greet greet = (Greet) DebugProxy.newInstance(tmp);
        //生成的greet和tmp有相同的hashCode

        greet.sayHello("walter");
        greet.goodBye();
    }
}
Aop实现原理 -- Proxy模式 (2)常规代理
public class SimpleProxy implements Greet {
    private Greet greet = null;

    public SimpleProxy(Greet greet) {
        this.greet = greet;
    }

    public void sayHello(String name) {
        System.out.println("--before method sayHello");
        greet.sayHello(name);
        System.out.println("--after method sayHello");
    }

    public void goodBye() {
        System.out.println("--before method goodBye");
        greet.goodBye();
        System.out.println("--after method goodBye");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Greet greet = new SimpleProxy(new GreetImpl());//生成代理
        greet.sayHello("walter");
        greet.goodBye();
    }
}
Aop实现原理 -- Proxy模式 (1)
//1、基类
public interface Greet {
    public void sayHello(String name);

    public  void goodBye();
}

//2、实现类
public class GreetImpl implements Greet
{
    public void sayHello(String name)
    {
        System.out.println("Hello " + name);
    }

    public void goodBye()
    {
        System.out.println("Good bye.");
    }
}
Aop实现原理 -- Decorator模式
//1、接口
public interface Work {
    public void insert();

}

//2、实现类
public class SquarePeg implements Work {
    public void insert() {
        System.out.println("方形桩插入");
    }

}

//3、代理类
public class Decorator implements Work {

    private Work work =null;
    //额外增加的功能被打包在这个List中
    private ArrayList others = new ArrayList();

    //在构造器中使用组合new方式,引入Work对象;
    public Decorator(Work work) {
        this.work = work;

        others.add("挖坑");

        others.add("钉木板");
    }

    public void insert() {
        newMethod();
    }


    //在新方法中,我们在insert之前增加其他方法,这里次序先后是用户灵活指定的
    public void newMethod() {
        otherMethod();
        work.insert();


    }

    public void otherMethod() {
        ListIterator listIterator = others.listIterator();
        while (listIterator.hasNext()) {
            System.out.println(((String) (listIterator.next())) + " 正在进行");
        }

    }
    public static void main(String[] args) {
        Work work = new Decorator(new SquarePeg());
        work.insert();

    }
}

一个字符串,找出这个字符串的第一对重复的字符
 /**
     * 一个字符串,找出这个字符串的第一对重复的字符
     * 如  abcdefgjikuoa   第一对重复的字符是’a’
     * 如   abcdegfeter 第一对重复的字符  ‘e’
     * <p/>
     * 找个hash map往里存,如果发现已经有值了就是找到了第一对,时间复杂度o(n)
     */
    public static void QuickFind() {
        String s = "kdaduasdasda";
        String re = null;
        Map map = new HashMap();
        //char[] ch = s.toCharArray();

        for (int i = 0; i < s.length(); i++) {
            String key = s.substring(i, i + 1);
            if (map.get(key) != null) {
                re = key;
                break;
            } else {
                map.put(key, 0);
            }
        }

        if (re != null) {
            System.out.println("The char is " + re);
        } else {
            System.out.println("There is no char!");
        }
    }
发牌
package com.dragon.study;

import java.util.*;

/**
 * 发牌算法的实现
 * 要求:把2副牌,也就是108张,发给4个人,留6张底牌
 */
public class Exec {
    public static void main(String[] args) {
        //存储108张牌的数组
        int[] total = new int[108];
        //存储四个玩家的牌
        int[][] player = new int[4][25];
        //存储当前剩余牌的数量
        int leftNum = 108;
        //随机数字
        int ranNumber;
        //随机对象
        Random random = new Random();

        //初始化数组
        for (int i = 0; i < total.length; i++) {
            total[i] = (i + 1) % 54;
            //处理大小王编号
            if (total[i] == 0) {
                total[i] = 54;
            }


        }
        //循环发牌
        for (int i = 0; i < 25; i++) {
            //为每个人发牌
            for (int j = 0; j < player.length; j++) {
                //生成随机下标
                ranNumber = random.nextInt(leftNum);
                //发牌
                player[j][i] = total[ranNumber];
                //移动已经发过的牌
                total[ranNumber] = total[leftNum - 1];
                //可发牌的数量减少1
                leftNum--;
            }
        }


        //循环输出玩家手中的牌
        for (int i = 0; i < player.length; i++) {
            for (int j = 0; j < player[i].length; j++) {
                System.out.print("  " + player[i][j]);
            }
            System.out.println();

        }

        //底牌
        for (int i = 0; i < 8; i++) {
            System.out.print("  " + total[i]);
        }
        System.out.println();

    }

}
DOM4J解析XML http://www.bishi100.com/?p=1375
<!--?xml version="1.0" encoding="UTF-8"?-->
<waiterroot>
    <waiter>
        <id>0</id>
        <type>笑傲江湖</type>
        <name>zdz</name>
    </waiter>
    <waiter>
        <id>1</id>
        <type>天龙八部</type>
        <name>zdz</name>
    </waiter>
    <waiter>
        <id>2</id>
        <type>神雕侠侣</type>
        <name>zdz</name>
    </waiter>
    <waiter>
        <id>3</id>
        <type>笑傲江湖</type>
        <name>zdz</name>
    </waiter>
    <waiter>
        <id>4</id>
        <type>风云争霸</type>
        <name>zdz</name>
    </waiter>
    <waiter>
        <id>5</id>
        <type>神雕侠侣</type>
        <name>zdz</name>
    </waiter>
</waiterroot>

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test {

    public static void main(String[] args) throws Exception {

        SAXReader sax = new SAXReader();
        File f = new File("data.xml");
        Document doc = sax.read(f);
        Element root = doc.getRootElement();
        Map map = new HashMap();

        for(Iterator it = root.elementIterator();it.hasNext();){
            Element element = (Element) it.next();//waiter

            for ( Iterator it2 = element.elementIterator(); it2.hasNext(); ) {
                  Element elementInner = (Element) it2.next();
                  if(elementInner.getName().equals("type")){
                      String size =  (String) map.get(elementInner.getText());
                      if(size != null){
                          int i = Integer.parseInt(size)+1;
                          map.put(elementInner.getText(),String.valueOf(i));
                      }else{
                          map.put(elementInner.getText(),String.valueOf(1));
                      }
                  }
           }
        }

        Set set = map.entrySet();
        Iterator it3 = set.iterator();
        while(it3.hasNext()){
            System.out.println(it3.next());
        }
    }

}
==================== 伪代码 =======================
解析器定义
读入Xml文件,获得Doc
定义存放key-value容器m
获得Xml文件的最上面的根
如果根目录Element未结束,递归
  如果节点Note未结束,递归
    如果节点名为“type”
    定义从容器m中取出key等于当前element节点值的Valuem
    如果Valuem为空,容器m放入key为当前element节点值,value为1的元素;
    如果valuem不为空,容器m放入key为当前element节点值,value为1+整数化(Valuem)的元素;
输出m
Thread例子
package com.dragon.study;

class Account {
    String name;
    float amount;


    public Account(String name, float amount) {
        this.name = name;
        this.amount = amount;
    }

    public synchronized  void deposit(float amt) {
        float tmp = amount;
          tmp += amt;

        try {
            Thread.sleep(1);//模拟其它处理所需要的时间,比如刷新数据库等
        } catch (InterruptedException e) {
            // ignore
        }

        amount = tmp;
    }

    public synchronized void withdraw(float amt) {
        float tmp = amount;
       tmp -= amt;

        try {
            Thread.sleep(13);//模拟其它处理所需要的时间,比如刷新数据库等
        } catch (InterruptedException e) {
            // ignore
        }

        amount = tmp;
    }

    public float getBalance() {
        return amount;
    }
}


public class AccountTest {
    private static int NUM_OF_THREAD = 1000;
    static Thread[] threads = new Thread[NUM_OF_THREAD];

    public static void main(String[] args) {
        long i_Begin = (System.currentTimeMillis());

        final Account acc = new Account("John", 1000.0f);
        for (int i = 0; i < NUM_OF_THREAD; i++) {
            threads[i] = new Thread(new Runnable() {
                public void run() {
                    acc.deposit(100.0f);
                    acc.withdraw(100.0f);
                }
            });
            threads[i].start();
        }

        for (int i = 0; i < NUM_OF_THREAD; i++) {
            try {
                threads[i].join(); //等待所有线程运行结束
            } catch (InterruptedException e) {
                // ignore
            }
        }
        System.out.println("Finally, John's balance is:" + acc.getBalance());
        long i_End = (System.currentTimeMillis());
        System.out.println("判断用户耗时:" + (i_End - i_Begin));

    }

}
Socket_Thread http://www.qqread.com/java/2010/06/w494082.html
package com.dragon.study.socket;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class HelloMessage extends Thread {

    private Socket socket_ = null;

    public HelloMessage(Socket socket) {

        this.socket_ = socket;

        this.start();

    }

    public void run() {

        try {

            BufferedReader bReader = new BufferedReader(new InputStreamReader(

                    this.socket_.getInputStream()));

            PrintWriter pWriter = new PrintWriter(this.socket_

                    .getOutputStream());

            String requestStr = bReader.readLine();

            if (requestStr != null && !"".equals(requestStr)) {

                if (requestStr.equals("java")) {

                    pWriter.println("your write is java");

                }

                if (requestStr.equals(".net")) {

                    pWriter.println("your write is .net");

                }

                if (requestStr.equals("php")) {

                    pWriter.println("your write is php");

                }

                if (requestStr.equals("end")) {

                    pWriter.println("your write is end");

                } else {

                    pWriter.println("your write is other");

                }

            } else {

                pWriter.println("your write is null");

            }

            pWriter.flush();

            pWriter.close();

            bReader.close();

            this.socket_.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}
Socket_Client http://www.qqread.com/java/2010/06/w494082.html
package com.dragon.study.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

public class ClientSocket {

    public static void main(String[] args) {

        clientRequest();

    }

    private static void clientRequest() {

        try {

            while (true) {

                Socket clientSocket = new Socket("127.0.0.1", 3456);

                BufferedReader bReader = new BufferedReader(new InputStreamReader(

                        System.in));

                System.out.println("please input java or .net or php or end");

                String strLine = bReader.readLine();

                if (strLine != null && !"".equals(strLine)) {

                    PrintWriter pWriter = new PrintWriter(clientSocket

                            .getOutputStream(), true);

                    pWriter.println(strLine);

                    BufferedReader br = new BufferedReader(

                            new InputStreamReader(clientSocket.getInputStream()));

                    String strResult = br.readLine();

                    System.out.println(strResult);

                    pWriter.flush();

                    pWriter.close();

                    clientSocket.close();

                }

            }

        } catch (UnknownHostException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}
Socket_Server http://www.qqread.com/java/2010/06/w494082.html
package com.dragon.study.socket;

import java.io.IOException;

import java.net.InetAddress;

import java.net.Socket;

public class ServerSocket {

    public static void main(String[] args) {

        beginSocket();

    }

    public static void beginSocket() {

        try {

            java.net.ServerSocket serverSocket = new java.net.ServerSocket(3456);

            InetAddress inta = serverSocket.getInetAddress().getLocalHost();

            System.out.println(inta.getHostAddress());

            while (true) {

                Socket socket = serverSocket.accept();

                new HelloMessage(socket);

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}
Global site tag (gtag.js) - Google Analytics