最近、Magicianを使用してプロジェクトを開発する過程で、いくつかの問題が見つかりました。Magicianには当面対応するソリューションがないため、特定のメソッドを監視したり、ポーリングの時間指定タスクを開始したりすることがありますが、これはもう少し面倒です。しかし、既存のマジシャンに機能を追加したくないのは、プロジェクトがどんどん大きくなり、最終的には大きな太った男になり、柔軟性が失われるためです。開発者がそれを使用すると、必要な機能や導入されていない機能に関係なく、一度にプロジェクトに参加することは私には受け入れられません。また、マジシャンの本来の意図に反していたため、最終的には新作としてリリースすることにしました。ユーザーに使用するかどうかの権利を与えます。
マジシャン-コンテナがもたらすもの
- Bean管理(IOCなし、Beanの関数をバインドし、いくつかの問題を解決するためだけに)
- AOP
- 時限タスク
Bean管理
クラスにアノテーションを追加するだけで、コントローラーで使用することはできず、すべてのクラスをBeanに変換する必要はありません。開発者は自由に決定できます。
このクラスでAOPまたはスケジュールされたタスクを使用する必要がある場合にのみ、Beanに変換することをお勧めします。
@MagicianBean
public class DemoBean {
}
AOP
AOPのロジックを書く
public class DemoAop implements BaseAop {
/**
* 方法执行前
* @param args 方法的参数
*/
public void startMethod(Object[] args) {
}
/**
* 方法执行后
* @param args 方法的参数
* @param result 方法的返回数据
*/
public void endMethod(Object[] args, Object result) {
}
/**
* 方法出异常后
* @param e 方法的异常信息
*/
public void exp(Throwable e) {
}
}
監視する必要のある方法に固執する
@MagicianBean
public class DemoBean {
@MagicianAop(className = DemoAop.class)
public void demoAopMethod() {
}
}
時限タスク
現在、間隔を置いたポーリングのみがサポートされており、cron式はまだサポートされていません
@MagicianBean
public class DemoBean {
// loop: 轮询频率,单位:毫秒
@MagicianTimer(loop=1000)
public void demoTimerMethod() {
}
}
Beanオブジェクトを取得します
メンバー変数を定義するときに値を直接割り当てることはできません。次の例は、推奨される書き込み方法です。詳細については、公式Webサイトのドキュメントを参照してください。
@MagicianBean
public class DemoBean {
private DemoBean demoBean;
public void demoMethod() {
demoBean = BeanUtil.get(DemoBean.class);
}
}
起動時にリソースをロードする
HttpServer httpServer = Magician
.createHttp()
.scan("com.test"); // Scanning range (package name)
// 在scan方法执行后,才可以加载bean,顺序一定要注意
MagicianContainers.load();
httpServer.bind(8080);
詳細については、公式Webサイトにアクセスしてください:https ://magician-io.com