美文网首页
架构师(一)——AOP 面向切面编程

架构师(一)——AOP 面向切面编程

作者: 王志强_9380 | 来源:发表于2020-11-26 10:57 被阅读0次
image.png

把相同的模块提取出来,做统一处理。一般都是横向切面。


image.png

如上,数据库增、删、改的时候,都要执行一个保存的过程,所以就通过一个动态代理,把保存的操作切出

public class MainActivity extends AppCompatActivity implements DBOperation {

    private DBOperation db;
    private final static String TAG = "netease >>> ";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // db = this;
        db = (DBOperation) Proxy.newProxyInstance(DBOperation.class.getClassLoader(),
                new Class[]{DBOperation.class}, new DBHander(this));
    }

    class DBHander implements InvocationHandler {

        private DBOperation db;

        DBHander(DBOperation db) {
            this.db = db;
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            if (db != null) {
                Log.e(TAG, "操作数据库之前,开始备份……");
                save(); // 查询数据库后备份,详细过程省略
                Log.e(TAG, "数据备份完成,等待操作");
                return method.invoke(db, args);
            }
            return null;
        }
    }

    // 点击事件
    public void jump(View view) {
        // startActivity(new Intent(this, OrderActivity.class));
        // 常规写法
        // db.save();
        db.delete();
    }

    @Override
    public void insert() {
        Log.e(TAG, "新增数据");
    }

    @Override
    public void delete() {
        Log.e(TAG, "删除数据");
    }

    @Override
    public void update() {
        Log.e(TAG, "修改数据");
    }

    @Override
    public void save() {
        Log.e(TAG, "保存数据");
    }
}

上面通过Proxy.newProxyInstance动态代理,实现了切面

相关文章

网友评论

      本文标题:架构师(一)——AOP 面向切面编程

      本文链接:https://www.haomeiwen.com/subject/joydbktx.html