Android Sp文件 轻量级IOC容器

 

今天我想写一篇日志,上一篇技术日志,是纪念我会使用接口和泛型,这一次是为了纪念,我学会使用反射。

 

接口一般都和工厂相挂钩,但是工厂写多了,每次接口实例化对象时,都感觉有些弱智,有时甚至还想吐。

 

怎么解决这个问题呢?有什么办法呢,带着这样的思考,我开始留心ioc,ioc很有意思,他也是使用工厂生成对象。生成不同对象的参数有两种,一种是xml文件,配置类的包名,使用Class生成。另一种使用注解,使用注解获取配置类的包名,连字符串都不用写,真的是干的漂亮。

 

好,定个小目标----使用注解标签作为方法参数,给方法使用。我是针对SP文件,注解如下:

 

为了用户方便操作,就好比你娶老婆,你说”我要漂亮的”,媒婆回答“你的身高要求是什么,皮肤需要白吗,脸型是什么样子呢,她睡觉打呼你在不在乎呢……”,此时此刻,你只想一巴掌呼死她,跟我BB那么多干嘛,你给我就是了。所以,程序调用一定要简单,媒婆累死那是媒婆的事。

 

 

 

 

 

 

 

 

 

我需要干的事:

 

我很简单,只需要写好接口,配置它的注解就可以了。

package com.example.administrator.pushinfosystem.sharp.factory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;



public class SpProxy implements InvocationHandler {


     private SharedPrefer sharedPrefer;
     SpProxy(SharedPrefer sharedPrefer)
     {
         this.sharedPrefer=sharedPrefer;
     }



    final String tag=getClass().getName();

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        boolean isGet = method.getName().contains("get");

        if(isGet)
        {

           SharpKey sharpKey =  method.getAnnotation(SharpKey.class);

           String key = sharpKey.key();
           Class type =  sharpKey.type();


           if(type==int.class)
           {
               int defInt = sharpKey.intValue();

               return sharedPrefer.getInt(key,defInt);
           }
           if(type==long.class)
           {
               Long defLong=sharpKey.longValue();

               return sharedPrefer.getLong(key,defLong);
           }

           if(type==String.class)
           {
               String defStr=sharpKey.strValue();


               return sharedPrefer.getStr(key,defStr);
           }

           if(type==float.class)
           {
               Float defFloat= sharpKey.floatValue();

               return sharedPrefer.getFloat(key,defFloat);
           }



        }

        boolean isSet=method.getName().contains("set");
        if(isSet)
        {
            SharpKey sharpKey =  method.getAnnotation(SharpKey.class);
            String key = sharpKey.key();
            Class type =  sharpKey.type();
            Object arg =  args[0];
            System.out.println("key:"+key+" type:"+type);

            if(type==int.class)
            {
                sharedPrefer.putInt(key, (Integer) arg);
            }
            if(type==long.class)
            {
                sharedPrefer.putLong(key, (Long) arg);
            }

            if(type==String.class)
            {
                sharedPrefer.putStr(key, (String) arg);
            }

            if(type==float.class)
            {
               sharedPrefer.putFloat(key, (Float) arg);
            }

        }


        return null;
    }


}

ε=(´ο`*)))唉,媒婆就可怜了。

媒婆的实现:

 

//媒婆的神器,遮住唇角大痔的如意芭蕉扇

package com.example.administrator.pushinfosystem.sharp.factory;





import android.content.Context;

import android.content.SharedPreferences;





public class SharedPrefer {



    SharedPreferences sp =null;



    SharedPrefer(String name, Context context)

    {

       sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);

    }



    void putInt(String key,int value)

    {

        sp.edit().putInt(key,value).commit();

    }



    int getInt(String key,int def)

    {



       return sp.getInt(key,def);

    }



    void putBoolean(String key,boolean value)

    {

        sp.edit().putBoolean(key,value).commit();

    }



    Boolean getBoolean(String key,boolean def)

    {

      boolean value =  sp.getBoolean(key,def);

      return value;

    }



    void putFloat(String key,float value)

    {

        sp.edit().putFloat(key,value).commit();

    }



    Float getFloat(String key,float def)

    {

       float value =  sp.getFloat(key,def);

       return value;

    }



    void putLong(String key,Long value)

    {

        sp.edit().putLong(key,value).commit();

    }



    Long getLong(String key,Long def)

    {

        Long value=sp.getLong(key,def);

        return value;

    }



    void putStr(String key,String value)

    {

        sp.edit().putString(key,value).commit();

    }



    String getStr(String key,String def)

    {

        String str = sp.getString(key,def);



        return str;

    }



















}

 

如意如意,趁我心意,变…… 嘭的一身,一个身材婀娜,长发飘飘的妹子就出来了

 

传送门 https://download.youkuaiyun.com/download/qq_30776389/10803704

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值