java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16470|回复: 103

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66083

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

    发表于 2019-7-30 10:33:16 | 显示全部楼层 |阅读模式
    《spring自定义作用域实现》
    ! R+ |: a4 Q: G! o$ S/ c7 m# r* ?8 \. N( r# T6 W, ^1 ]5 Z! R9 [( j
    部分java源码:MyScope.javapackage com.javazx.po;6 @2 A7 Q8 s' O' B
    5 V9 I/ |7 s  Y1 G/ u) @: O
    import org.springframework.beans.factory.ObjectFactory;
    4 i4 ]4 g: q+ H* m$ _- o- B
    import org.springframework.beans.factory.config.Scope;
    ; @  l' X* _% i; x# ]

    4 k$ Q2 Y' b) O, Q$ n
    import java.util.Map;6 |' n$ j7 W" ]& w
    import java.util.Random;! \& H! O1 @, T* X0 u
    import java.util.concurrent.ConcurrentHashMap;7 A& U4 q) y# L( R& F, P

    9 Z6 \1 m7 C- K& J* S* a
    /**
    : U, Q6 O" |# ^# T
    * @author: itmrchen
    0 M8 r6 h- a1 u% S+ k
    * @Description:双例模式-自定义作用域( ?+ Q. B. U' m
    * @date 2019/7/30 8:59) g' P0 }5 m2 S7 _
    */
    " Z* I7 i; T- q; O, K5 u
    public class MyScope implements Scope {
    4 N  E& ^2 w' |" \/ J    Map<String, Object> map1 = new ConcurrentHashMap<String, Object>(16);" X. u! K: G! Z) v8 r. R+ ]3 k
        Map<String, Object> map2 = new ConcurrentHashMap<String, Object>(16);8 N3 S* ~  ?* r% ~

    # [" W  H6 ~9 f- t: g- [8 ~" @
        public Object get(String name, ObjectFactory<?> objectFactory) {
    8 i6 r% H( U) H( ?8 Q+ d        if (!map1.containsKey(name)) {
    ) r# q$ j' N# J( I  n2 N            Object o = objectFactory.getObject();
    % b: O) E- i0 W1 p
                map1.put(name, o);: }" _( Q  j. e) Y% b- E, }
                return o;
    + v8 r0 Y' |( z( [
            }
    ! b. k& M) O* }( I: X        if (!map2.containsKey(name)) {
    ( r7 y( g0 e6 u1 ?8 Y            Object o = objectFactory.getObject();% i. U  U5 S; t. x4 l2 Z, z
                map2.put(name, o);
    ) G! u' x: D* V$ J% ~! d+ Y
                return o;  \( M* P! i8 s& I- J( n
            }8 a6 [1 p0 E* s
            int i = new Random().nextInt(2);& o+ k8 ^8 Z5 o9 C
            if (i == 0) {4 P/ o- P3 Q7 l
                return map1.get(name);/ u0 j0 ^3 @$ b! K; X" g
            } else {
    3 O% F0 p& E# u* G  _+ a            return map2.get(name);" C' C! }0 J4 O3 n8 _/ A, L
            }* U" n# I; u( @
    $ W) M0 c7 E' `. z2 }% v5 N, H
        }
    , ^( |/ b. z* r6 s+ y* v' y, v
    4 @: k2 O# r" T    public Object remove(String name) {. h5 F' @3 _& L& @1 A6 ^' n0 X
            if (map2.containsKey(name)) {
    / R$ r& k& r: F0 a) v" _            Object o = map2.get(name);% X$ k# L5 j" n* G
                map2.remove(name);
    1 R4 A. q9 Z4 Z' N
                return o;( }" g* i6 w/ m  ]
            }
    1 w2 R6 D6 {( r0 g- I' ~        if (map1.containsKey(name)) {
    7 X( S1 q. w  o$ c# @' j( [, l% f            Object o = map1.get(name);- q& s9 q. Q  Y
                map1.remove(name);' h$ }) b) u; x1 A9 Z1 a
                return o;  C+ ~2 F, W3 O% s' @( @
            }
    + V" g, k7 F$ H6 \" b        return null;0 g0 X# y9 s, Y+ B5 }
        }
    ! y8 _0 P, z3 f# \  n& C% C; ~+ q' D+ t- Y2 T
        public void registerDestructionCallback(String s, Runnable runnable) {
    6 R  n9 n& u& Q4 ]2 K6 u& s; i* Z2 k+ {" E& I8 ~& R. f2 R
        }
    2 N' m2 o1 {% [6 U* v# m8 y2 D; P* K- d# S' W% H5 K
        public Object resolveContextualObject(String s) {  h9 U4 r! m& r* _  c- n7 i
            return null;
    & z" Q' F0 y/ t; X$ |3 K% C7 X
        }
    $ d8 c) z4 s/ @  Y+ v* [) X0 g- i/ K  c4 @
        public String getConversationId() {
    / p% A+ p& i1 Q' i$ e) [; b* A        return null;
    + U& h% _6 S' E% ^
        }1 D& l( n  M1 e4 ]
    }
    ' L& {/ ]3 ^( Y, ]$ z3 F0 X: V0 W3 \- n- L6 F# ~8 M
    spring.xml关键代码:
    % J, Q, Q3 n' \, E& W; @2 v3 a9 i. d' X; U; n8 @* E
    <!-- 自定义作用域 -->
    . p0 c  Z- \3 E* W
    <bean id="myScope" class="com.javazx.po.MyScope"/>& f" _6 h& [! x
    <bean id="simpleThreadScope" class="org.springframework.context.support.SimpleThreadScope"/>
    * F! }) D: D4 o
    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    # Z4 N6 F" b2 {! R  b  r
        <property name="scopes">; E$ D' h$ T. \! I( y( j, N
            <map>! o% _5 [( C, r) O
                <entry key="myScope" value-ref="myScope"/>
    2 Q7 A# u* V3 @+ g
                <!-- spring自定义的作用域 不同线程创建新实例-->
    / f8 n( J, T  S4 X8 k1 ~5 t
                <entry key="simpleThreadScope" value-ref="simpleThreadScope"/>1 U( d2 m' x! [: z& x0 h
            </map># n, r9 S. E  {2 J, @+ P5 H" Y
        </property>
    " d0 W* d! j0 ^7 ?" L% |: D
    </bean>; C& H( l; J. |) x! s: G
    <!--<bean id="bean3" class="com.javazx.po.Bean3" scope="myScope"/>-->
    1 x; y3 I) T; s/ W
    <bean id="bean3" class="com.javazx.po.Bean3" scope="simpleThreadScope"/>3 [5 w& @7 e+ T! f  d6 Z1 X" P
    * z- n8 s% w' W2 |- |3 l

    % l1 e5 G4 r3 K- T
    github地址:https://github.com/itmrchen/springPro7 @2 j) H& Z4 r9 ^

    4 J3 R. f. Y* S% j8 k( W" t# I! O: X% g) {
    % r2 ]9 [2 f( Q$ g2 @0 g
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    3219

    帖子

    6440

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3206

    帖子

    6414

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3294

    帖子

    6590

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3331

    帖子

    6664

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    3280

    帖子

    6579

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3246

    帖子

    6492

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    3294

    帖子

    6603

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3276

    帖子

    6554

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3284

    帖子

    6570

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-19 21:49 , Processed in 0.140506 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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