java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 20683|回复: 103

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

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

    [LV.Master]出神入化

    2100

    主题

    3758

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66830

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

    发表于 2019-7-30 10:33:16 | 显示全部楼层 |阅读模式
    《spring自定义作用域实现》% b) d) Y+ M7 H, U4 H% e
    7 Y3 R' z1 l# n
    部分java源码:MyScope.javapackage com.javazx.po;8 z( n8 K1 D, m6 _: Y

    * n( z$ ~7 v- C9 [) M
    import org.springframework.beans.factory.ObjectFactory;
    6 \  F& Q/ o) C7 [1 y
    import org.springframework.beans.factory.config.Scope;
    9 z' l0 [$ a! P* k' R

    5 F/ B2 h; u5 Q' q& H: {( }
    import java.util.Map;& y1 @* N) j% C5 V' a' j9 ^2 b0 w& r
    import java.util.Random;
    ' g5 }5 e  x- o
    import java.util.concurrent.ConcurrentHashMap;
    + ~, u' l0 U) }% U% M( b- _! O
    5 l' s; R, J/ s
    /**# c  J9 G4 L4 O- @0 t3 \/ x( B
    * @author: itmrchen) U& Y# ~( F: S. R# J; T1 j2 }& B! S
    * @Description:双例模式-自定义作用域
    6 C  V4 W6 H5 i! F
    * @date 2019/7/30 8:59
    & d8 X" @: J5 D: i, A4 [7 U; t
    */* E9 x( ^5 b' [+ m3 T0 _
    public class MyScope implements Scope {
    3 d2 |+ m& @' H/ `& P: g    Map<String, Object> map1 = new ConcurrentHashMap<String, Object>(16);
    4 \8 D9 l0 _- g, l
        Map<String, Object> map2 = new ConcurrentHashMap<String, Object>(16);! w4 [, r/ Z# i; J5 o

    9 C, z1 w; Z- E# d* c6 s2 P' q
        public Object get(String name, ObjectFactory<?> objectFactory) {
    . u& h7 r+ A) S# ]% X        if (!map1.containsKey(name)) {; B7 L9 B" \1 z  d) m/ w' y
                Object o = objectFactory.getObject();- i3 m" @* a% E: a) x
                map1.put(name, o);
    # `: R2 |# x5 d+ j
                return o;
    ' O0 q( I6 ^, O- u! T
            }2 N6 m0 I5 B* D: ~" @" l4 W& ?
            if (!map2.containsKey(name)) {* \7 `$ s3 B$ b# s+ Z: T
                Object o = objectFactory.getObject();+ B# ^/ ~& ?3 J1 \& O
                map2.put(name, o);, I3 l, }. R- g; P' m8 ^. B' E
                return o;
    ) I8 F3 T8 E( E+ d* n$ k9 H
            }
    : ?: q! i; C2 [9 D        int i = new Random().nextInt(2);& v2 q6 A, F3 r4 O% v2 ]( e3 L
            if (i == 0) {+ m% R7 D3 Q' ^* H  w; K' E
                return map1.get(name);
    , d7 I8 W$ M! R: _; \
            } else {
    ' n! l3 q  u6 w' b6 X& t            return map2.get(name);
      ?0 x4 q) d1 E
            }7 u& H8 ?" E. w

    6 {9 h# l+ e* j  J, D/ s- w    }" X+ f: D6 d7 g) n! Y4 ]" Y& H2 R" n4 ]
    ( |1 |, q+ y* i; `; f
        public Object remove(String name) {8 I4 E! I* k9 ~5 ^# O
            if (map2.containsKey(name)) {, t, T+ J6 P7 w) m# ]* B
                Object o = map2.get(name);* b) e' j0 \% G: {( y
                map2.remove(name);
    + @( x2 v: N3 T" f
                return o;  M* j) M7 {" o# F
            }' d( d) W, x# R8 i9 z
            if (map1.containsKey(name)) {
    ! v8 F5 [" w% C; h" h            Object o = map1.get(name);
    , `$ o; a" Y- n" L& n3 U
                map1.remove(name);) \* d, m* p% J: z2 O: ]3 S
                return o;
    $ }6 v1 P2 L" X: q
            }6 P; M$ f6 ?1 x" o
            return null;
    : X4 W- l8 y/ O/ }' g( H
        }
    3 J' w9 _3 O; h; Z' o7 w
    ! j) c- }; j1 S. T0 A    public void registerDestructionCallback(String s, Runnable runnable) {
    ) m5 b  J/ Q9 ?9 c3 ~( p
    & s3 A& _. N7 I0 x0 [    }9 H5 a' {+ D8 Y2 S$ D  o. D

    $ V  C! i9 m$ a6 w5 Z  s    public Object resolveContextualObject(String s) {5 h: j, I( W7 z0 z3 A( F2 e
            return null;; z' U; F7 y; e0 n
        }& q: s3 {$ L1 i; j: M2 s& r5 g" X

    7 J+ h) q$ [) Z6 Y    public String getConversationId() {
    . m/ o7 h/ A( W6 l: Z' ?6 J        return null;
    & [3 W: M# [, m/ d2 M4 s
        }
    * x* G* u$ j+ u- D}
    * C' I* ]5 R3 Y9 h, w
    ' V6 ?3 C8 c7 K  g/ dspring.xml关键代码:! X$ o$ v, y2 U7 h) C2 s) \$ Y
    ) k2 h  G( a' A. Q& t( a2 }7 y
    <!-- 自定义作用域 -->
    ( T: G! }6 X# H' L. }$ `
    <bean id="myScope" class="com.javazx.po.MyScope"/># a  n5 q. t7 [! }( _. g
    <bean id="simpleThreadScope" class="org.springframework.context.support.SimpleThreadScope"/>
    / v  B( c  U1 k7 y3 }& k
    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">8 m" |0 q1 o- @+ U' `# o2 O! N! y
        <property name="scopes">
    2 W1 A( b' R, R4 @" z
            <map>- q# Y! w, `+ r# j& J& }' Z2 D
                <entry key="myScope" value-ref="myScope"/>
    " ]+ n  ?# H% M# _0 H, i: n1 R
                <!-- spring自定义的作用域 不同线程创建新实例-->
    8 k3 m1 Q6 I) x2 U' W3 |$ d
                <entry key="simpleThreadScope" value-ref="simpleThreadScope"/>
    : [2 |$ e: y- @% @' B8 B1 N
            </map>
    & w0 b1 d+ ?, d1 O- V$ }: l6 P0 s8 U
        </property>: g+ N; p3 d$ w/ U" f" O
    </bean>
    0 ]' r! k/ V, d8 w
    <!--<bean id="bean3" class="com.javazx.po.Bean3" scope="myScope"/>-->% f& p$ j+ _+ y  Y6 K
    <bean id="bean3" class="com.javazx.po.Bean3" scope="simpleThreadScope"/>* O2 k* q7 _8 S% Y& v/ m$ R
    8 F, }/ w5 F/ C, o' W, K( y* o) o

    - E. h6 J$ E1 |, m. }$ I4 d- Y
    github地址:https://github.com/itmrchen/springPro
    % u* H3 v( a8 U! F6 }
    1 h" D' {3 G4 A4 u' x* K# f' B. D4 j- T- F& S8 G& N' j

    ( ]' E+ t( e2 C8 o
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    4695

    帖子

    9392

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4670

    帖子

    9342

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4692

    帖子

    9386

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4815

    帖子

    9632

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    4752

    帖子

    9523

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4703

    帖子

    9406

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    4730

    帖子

    9475

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4729

    帖子

    9460

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4727

    帖子

    9456

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-19 18:24 , Processed in 0.865162 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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