java模块可插拔_实现可插拔(⼀种思想)根据django中间件配置,创建⾃⼰项⽬的中间件,实现功能的可插拔式设计
参考 django 中间件
参考 django restframework
创建中间件的思想
开始的⽐较low的版本
# @Author :SkyOcean
# @File :notify.py
def nd_msg(content):
print('短息通知%s' % content)
def nd_emil(content):
print('邮箱通知%s' % content)目的地英语
def nd_wechat(content):
print('微信通知%s'% content)
分手的文章
# @Author :SkyOcean
# @File :run.py
ify import *
def run(content):
nd_msg(content)
nd_emil(content)
nd_wechat(content)
run('今天放假')
模拟中间件
创建⼀个notify⽂件夹
⽂件夹内容
# @Author :SkyOcean
# @File :msg.py
class Email(object):
def __init__(lf):
pass#前提准备,⼀些密钥,⼀些配置
def nd(lf, content):
print('邮件通知%s' % content)
# @Author :SkyOcean
# @File :msg.py
class Msg(object):
def __init__(lf):
pass#前期准备,连接接⼝,配置密钥,api,参数等
抹杀def nd(lf,content):
外语教育网print('短信通知%s'%content)
# @Author :SkyOcean
# @File :msg.py
class WeChat(object):
def __init__(lf):
pass#前提zui'bei
def nd(lf, content):
collegesprint('微信通知%s' % content)
# @Author :SkyOcean
# @File :__init__.py
import ttings
dance怎么读spencer tunickimport importlib
def nd_all(content):
for module_path in ttings.NOTIFY_LIST:
module, class_name = module_path.rsplit('.',maxsplit=1)
# module = 'ail' class_name = 'Email'
mod = importlib.import_module(module) # mod就是模块名
# from notify import email
cls = getattr(mod,class_name) # 利⽤反射 获取到模块中类的变量名obj = cls()
obj.nd(content)
外⾯写好配置⽂件
# @Author :SkyOcean
# @File :ttings.py
NOTIFY_LIST=[
'ail.Email',
describe是什么意思'notify.msg.Msg',bright star
'notify.wechat.WeChat',
]
运⾏⽂件
# @Author :SkyOcean
# @File :run.py
import notify
notify.nd_all('今天很开森')
补充importlib模块
可以将字符串进⾏拆分
import importlib
mod = importlib.import_module('ail' )
这个时候就是将ail 拆分成 from notify import email mod这个时候就等于email
possiblely
它可以点email内部的所有⽅法
⼀般的使⽤
cls=attr(mod,'Email')
从mod模块内部获取Email类
这个时候cls就是Eail类
然后可以初始化
obj=cls()获取对象
⽤对象点取类中的⽅法等。