javazx 发表于 2019-7-30 10:33:16

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

《spring自定义作用域实现》

部分java源码:MyScope.javapackage com.javazx.po;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;

import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;

/**
* @author: itmrchen
* @Description:双例模式-自定义作用域
* @date 2019/7/30 8:59
*/
public class MyScope implements Scope {
    Map<String, Object> map1 = new ConcurrentHashMap<String, Object>(16);
    Map<String, Object> map2 = new ConcurrentHashMap<String, Object>(16);

    public Object get(String name, ObjectFactory<?> objectFactory) {
      if (!map1.containsKey(name)) {
            Object o = objectFactory.getObject();
            map1.put(name, o);
            return o;
      }
      if (!map2.containsKey(name)) {
            Object o = objectFactory.getObject();
            map2.put(name, o);
            return o;
      }
      int i = new Random().nextInt(2);
      if (i == 0) {
            return map1.get(name);
      } else {
            return map2.get(name);
      }

    }

    public Object remove(String name) {
      if (map2.containsKey(name)) {
            Object o = map2.get(name);
            map2.remove(name);
            return o;
      }
      if (map1.containsKey(name)) {
            Object o = map1.get(name);
            map1.remove(name);
            return o;
      }
      return null;
    }

    public void registerDestructionCallback(String s, Runnable runnable) {

    }

    public Object resolveContextualObject(String s) {
      return null;
    }

    public String getConversationId() {
      return null;
    }
}

spring.xml关键代码:

<!-- 自定义作用域 -->
<bean id="myScope" class="com.javazx.po.MyScope"/>
<bean id="simpleThreadScope" class="org.springframework.context.support.SimpleThreadScope"/>
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
      <map>
            <entry key="myScope" value-ref="myScope"/>
            <!-- spring自定义的作用域 不同线程创建新实例-->
            <entry key="simpleThreadScope" value-ref="simpleThreadScope"/>
      </map>
    </property>
</bean>
<!--<bean id="bean3" class="com.javazx.po.Bean3" scope="myScope"/>-->
<bean id="bean3" class="com.javazx.po.Bean3" scope="simpleThreadScope"/>


github地址:https://github.com/itmrchen/springPro



WeiApp 发表于 2019-12-24 18:54:39

可以看看吗

a7813180 发表于 2020-1-12 21:11:44

可以下载

qing278916117 发表于 2020-1-30 09:10:44

好好学习 天天向上

干干干干干 发表于 2020-2-20 07:35:04

大佬厉害呀

yylmq 发表于 2020-3-20 11:07:06

佩服佩服!

希腊神话 发表于 2020-3-25 15:33:57

感谢感谢感谢感谢感谢感谢感谢感谢

gozaptest 发表于 2020-3-28 12:03:27

真的是太棒啦

washingkang 发表于 2020-3-31 23:42:08

非常好非常好非常好非常好非常好非常好

alex 发表于 2020-4-2 13:21:53

很完美的教程!!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【Java源码】双例模式与自定义作用域MyScope SimpleThreadScope