今日、多くの種類のためにプロジェクトを行う際に、それが後の展開を容易にするため、他の場合は使用しないでください、同様の戦略モードになっ
すべての実装クラスが同じインタフェースを継承して、関係のないクラスの実装クラスは、すべての構築します
@Service
public class SendTemplateService {
Map<String, WechatSendTemplateService> wechatSendTemplateServiceMap = new HashMap<>();
// 构造函数,如果你是集合接口对象,那么就会把spring容器中所有关于该接口的子类,全部抓出来放入到集合中,如果子类使用了@Transactional事务注解,所获取的类都是代理实例,获取的类名也是附带代理实例信息
public SendTemplateService(List<WechatSendTemplateService> wechatSendTemplateServices) {
for (WechatSendTemplateService wechatSendTemplateService : wechatSendTemplateServices) {
wechatSendTemplateServiceMap.put(wechatSendTemplateService.getClass().getSimpleName()
.replace("SendTemplateServiceImpl", "").toUpperCase(), wechatSendTemplateService);
}
}
}
アイデアは、自分のキーにマップ内のすべてのクラス、大会の名称を達成することです。キーのマップはすべて大文字、簡単な試合に時間を置きます
キーマッチを使用して、私は試合に名前の現象ではなく、クラスに気づきました
プロキシモードで表情で、springcglibの背面に注意してください。情報の2つのクラスがあり、プロキシインスタンスで他のすべての情報、プロキシインスタンスのクラス名を取りませんでした
ない注釈付き@Transactional二つのクラスコード帯域間の差はありません
他のすべては、トランザクション@Transactionalコメントを使用しています。
突然、AOPプロキシモードとSpringのトランザクションが達成されて思い出しました。したがって、このクラスを使用すると、プロキシされます@Transactional