java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16511|回复: 103

【Java源码】双例模式与自定义作用域MyScope SimpleThreadScope

  [复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66093

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-7-30 10:33:16 | 显示全部楼层 |阅读模式
    《spring自定义作用域实现》
    5 m5 I4 [8 T+ h9 e! g
    2 W2 m" [  ^- K+ U# x8 z% \; U0 [部分java源码:MyScope.javapackage com.javazx.po;  R, S1 T8 |& G3 g/ H

    / L; P$ w& B5 ]4 g
    import org.springframework.beans.factory.ObjectFactory;5 u' r' k, j. w6 c7 R7 y5 N
    import org.springframework.beans.factory.config.Scope;
    ! m# }+ S- z. V+ B& p
    / d# c8 A" `% L. `3 y7 }7 v9 R
    import java.util.Map;4 d. Z# H- \  O& r1 o6 [4 r
    import java.util.Random;
    , @: S" K2 |! }# c- m  R
    import java.util.concurrent.ConcurrentHashMap;
    " P: F4 A( O+ h2 E

    : f5 ~1 B( I( r: Q$ q7 X. Z3 s
    /**
    + v, Y6 o' }% ^
    * @author: itmrchen: i7 B& l* U7 n$ k. S4 h. i3 s
    * @Description:双例模式-自定义作用域
    * X  b. o* d$ r) t) ~" k% X
    * @date 2019/7/30 8:59
    7 r4 h" \* M5 F5 L" T; f
    */# t0 @# G8 e& A* q0 I
    public class MyScope implements Scope {' N6 e5 }, w3 e3 u
        Map<String, Object> map1 = new ConcurrentHashMap<String, Object>(16);% _( h3 H" @' |
        Map<String, Object> map2 = new ConcurrentHashMap<String, Object>(16);5 [. v" D3 J, ^7 D. W3 P
    " p4 ]6 q7 i4 e/ M
        public Object get(String name, ObjectFactory<?> objectFactory) {
    ) B$ _; j# H7 p5 n4 k0 {" }8 e) I        if (!map1.containsKey(name)) {
    $ q+ s! S5 z4 w( k( x            Object o = objectFactory.getObject();
    + H. `5 J& t8 P: R1 B( r- L
                map1.put(name, o);- Y. U9 B+ @6 E4 K
                return o;
    2 [; V1 m3 y' f$ a, \+ X' B/ |
            }
    5 ~' [  }: D6 _/ D9 y' k5 L2 d% h        if (!map2.containsKey(name)) {- S# B/ B- |5 a' O, P
                Object o = objectFactory.getObject();0 V2 H0 a9 F- J/ e2 e  S9 z
                map2.put(name, o);3 b9 H" {; n  K( t3 ]
                return o;+ y0 U! h+ ]* X' R! z# D
            }
    2 d, N7 Q5 N* u/ L& W/ Y) {        int i = new Random().nextInt(2);
    ! q) Q3 A  L( c, [
            if (i == 0) {
    ; }8 O' ]! h9 `            return map1.get(name);
    # y/ K" |& ^' {- y/ b4 J- d
            } else {
    : E; `" _8 ]+ X& S$ P/ _            return map2.get(name);
    8 P' [+ v' m% r
            }$ N" R* R  M; H  r- w$ ?$ U8 G

    2 [: x  K4 a' z3 Q$ H& E" W' S8 x    }
    3 t6 [( e" {) h& J- |) k" h# d7 e! x
    / j8 q( d" f2 i5 ~    public Object remove(String name) {% N: X# v) @. k+ m) n7 c1 D
            if (map2.containsKey(name)) {
    : H& w" I# r" N; W            Object o = map2.get(name);' Z, d" I2 ?/ t' r: V6 n
                map2.remove(name);3 q# n& Y% Z" J; v' E& d* R
                return o;
    % T: L" ^1 }; i
            }
    % i  T2 R3 o+ c) q1 x        if (map1.containsKey(name)) {! S" }8 l7 ~, t" ~2 Z, g9 {
                Object o = map1.get(name);
    6 B8 e$ u% s- _  ^" ^, d: ~: O
                map1.remove(name);8 W1 c0 V8 C4 y& X9 f/ m5 Y) b, V" Y
                return o;
    " Y% k0 [5 V' O
            }
    1 _( e8 e& x- T1 c/ t, N; I        return null;
    9 O. C4 k5 F0 c
        }% Z2 L, \' m- u9 m. G* P4 l" u

    % z) D2 n) b. j8 T    public void registerDestructionCallback(String s, Runnable runnable) {, X1 [6 o3 g4 o' D9 N7 q

    ) u& j* n+ I* g# l( M" o    }( e2 E# ]" M, h. i. ]3 A

    6 T- K& m! w+ a* M# b    public Object resolveContextualObject(String s) {
    ( }7 B  Z4 a: d% N8 S        return null;
    # o/ m- s! y% P0 M4 m: X
        }
    1 g# R: u8 E  P* ~' \
      m- o8 t0 q5 r2 }0 x& m/ c    public String getConversationId() {' p! @# r  ]) [* B* K5 q
            return null;
    ! x- b6 A5 C' q4 ~$ C! y
        }# S4 y8 i9 c+ L8 u) R; z
    }, i! w  a  ?9 e: t3 \$ c

    + ?4 P2 o  }2 X0 P' _spring.xml关键代码:% m( v, z9 {2 Z- }' u

    # Y5 \5 f6 i+ ^<!-- 自定义作用域 -->
    7 a- e& ~/ ]& o) x
    <bean id="myScope" class="com.javazx.po.MyScope"/>1 ], P% t$ I- {" f( s
    <bean id="simpleThreadScope" class="org.springframework.context.support.SimpleThreadScope"/>
    ; h1 d4 m& m( Z( J; W  ~3 j3 \
    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    6 ~" w$ A  |4 s5 T
        <property name="scopes">
    : D% A0 x8 L) O9 v' S
            <map>* @5 w4 S) v: Z8 q% m6 D
                <entry key="myScope" value-ref="myScope"/>
    & F( [3 E9 f' Q2 C
                <!-- spring自定义的作用域 不同线程创建新实例-->6 `2 S4 h- m- r( G- f$ t
                <entry key="simpleThreadScope" value-ref="simpleThreadScope"/>4 F  }+ A3 [  Q6 [0 H5 P% Z& ?& k
            </map>" Z6 `2 i4 _2 s5 t
        </property>6 ]+ x. ]5 N9 W) T9 L2 E! B
    </bean>
      d  |. e4 h$ u4 r
    <!--<bean id="bean3" class="com.javazx.po.Bean3" scope="myScope"/>-->
    6 V" ^* H8 N- [1 V, n, P) c
    <bean id="bean3" class="com.javazx.po.Bean3" scope="simpleThreadScope"/>) _- N! d6 |8 M% v3 x1 g

    % M0 p8 Z$ A: ~# ^/ I
      S( V& ~: p4 {. L' D! b( ?! O, D
    github地址:https://github.com/itmrchen/springPro- s" F% M9 v; @
    . l: E. Y; R( F6 I

    ) M, z3 u( ?! o$ u1 j" i, q% q/ F/ s" ?( A/ d6 W
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    3249

    帖子

    6500

    积分

    普通会员

    Rank: 2

    积分
    6500
    发表于 2019-12-24 18:54:39 | 显示全部楼层
    可以看看吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3236

    帖子

    6474

    积分

    普通会员

    Rank: 2

    积分
    6474
    发表于 2020-1-12 21:11:44 | 显示全部楼层
    可以下载
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3314

    帖子

    6630

    积分

    普通会员

    Rank: 2

    积分
    6630
    发表于 2020-1-30 09:10:44 | 显示全部楼层
    好好学习 天天向上
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3360

    帖子

    6722

    积分

    普通会员

    Rank: 2

    积分
    6722
    发表于 2020-2-20 07:35:04 | 显示全部楼层
    大佬  厉害呀
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-6-15 21:06
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3311

    帖子

    6641

    积分

    普通会员

    Rank: 2

    积分
    6641
    发表于 2020-3-20 11:07:06 | 显示全部楼层
    佩服佩服!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3289

    帖子

    6578

    积分

    普通会员

    Rank: 2

    积分
    6578
    发表于 2020-3-25 15:33:57 | 显示全部楼层
    感谢感谢感谢感谢感谢感谢感谢感谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2015-4-27 14:30
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3337

    帖子

    6689

    积分

    普通会员

    Rank: 2

    积分
    6689
    发表于 2020-3-28 12:03:27 | 显示全部楼层
    真的是太棒啦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3301

    帖子

    6604

    积分

    普通会员

    Rank: 2

    积分
    6604
    发表于 2020-3-31 23:42:08 | 显示全部楼层
    非常好非常好非常好非常好非常好非常好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3320

    帖子

    6642

    积分

    普通会员

    Rank: 2

    积分
    6642
    发表于 2020-4-2 13:21:53 | 显示全部楼层
    很完美的教程!!!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-4-25 20:11 , Processed in 0.110931 second(s), 35 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表