您的位置:首页 > 其它

constellio——基于solr的开源搜索引擎系统源码研究(一)

2013-02-17 02:17 621 查看
以下为spring的配置文件 constellio.xml,对基础服务类进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"
default-lazy-init="true">

<util:list id="availablePluginNames">
</util:list>

<util:map id="config">
<entry key="supportedLanguages">
<list>
<value>en</value>
<value>fr</value>
</list>
</entry>
<!-- <entry key="searchableLanguages"> <list> <value>fr</value> <value>en</value>
<value>de</value> <value>es</value> <value>it</value> <value>nl</value> </list>
</entry>
-->

<!-- dir paths where it is possible to download a file using DownloadFileServlet
-->
<!-- Usefull for connector's content url -->
<entry key="fileDownloadDirs">
<list>
<value></value>
</list>
</entry>
<entry key="defaultConnectorManager">
<value>http://127.0.0.1:8089/huilan-constellio</value>
</entry>
<entry key="dictionaries">
<value>/WEB-INF/dictionaries</value>
</entry>
<!-- Search alerts will refer to this url -->
<entry key="externalServerUrl">
<value>http://localhost:8089/huilan-constellio</value>
</entry>
</util:map>

<bean id="entityManager"
class="com.doculibre.constellio.utils.persistence.ConstellioPersistenceContext"
factory-method="getCurrentEntityManager" scope="prototype" />

<bean id="aclServices" class="com.doculibre.constellio.services.ACLServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="analyzerClassServices"
class="com.doculibre.constellio.services.AnalyzerClassServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="analyzerServices" class="com.doculibre.constellio.services.AnalyzerServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="authenticationServices"
class="com.doculibre.constellio.services.AuthenticationServicesImpl"
scope="prototype">
</bean>

<bean id="authorizationServices"
class="com.doculibre.constellio.services.AuthorizationServicesImpl"
scope="prototype">
</bean>

<bean id="backupServices"
class="com.doculibre.constellio.services.BackupServicesImpl"
scope="singleton">
</bean>

<bean id="clickLogEntryServices"
class="com.doculibre.constellio.services.ClickLogEntryServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="clusteringServices"
class="com.doculibre.constellio.services.ClusteringServicesImpl"
scope="prototype">
</bean>

<bean id="collectionPermissionServices"
class="com.doculibre.constellio.services.CollectionPermissionServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="connectorInstanceServices"
class="com.doculibre.constellio.services.ConnectorInstanceServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="connectorManagerServices"
class="com.doculibre.constellio.services.ConnectorManagerServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="connectorTypeMetaMappingServices"
class="com.doculibre.constellio.services.ConnectorTypeMetaMappingServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="connectorTypeServices"
class="com.doculibre.constellio.services.ConnectorTypeServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="constellioInitServices"
class="com.doculibre.constellio.services.ConstellioInitServicesImpl"
scope="singleton">
</bean>

<bean id="credentialGroupServices"
class="com.doculibre.constellio.services.CredentialGroupServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="elevateServices" class="com.doculibre.constellio.services.ElevateServicesImpl"
scope="singleton">
</bean>

<bean id="facetServices" class="com.doculibre.constellio.services.FacetServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="featuredLinkIndexHelper"
class="com.doculibre.constellio.lucene.impl.FeaturedLinkIndexHelperImpl"
scope="singleton">
</bean>

<bean id="featuredLinkServices"
class="com.doculibre.constellio.services.FeaturedLinkServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="federationServices"
class="com.doculibre.constellio.services.FederationServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="fieldTypeClassServices"
class="com.doculibre.constellio.services.FieldTypeClassServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="fieldTypeServices" class="com.doculibre.constellio.services.FieldTypeServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="filterClassServices"
class="com.doculibre.constellio.services.FilterClassServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="freeTextTagIndexHelper"
class="com.doculibre.constellio.lucene.impl.FreeTextTagIndexHelperImpl"
scope="singleton">
</bean>

<bean id="freeTextTagServices"
class="com.doculibre.constellio.services.FreeTextTagServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="groupServices" class="com.doculibre.constellio.services.GroupServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="importExportServices"
class="com.doculibre.constellio.services.ImportExportServicesImpl"
scope="prototype">
</bean>

<bean id="indexFieldServices"
class="com.doculibre.constellio.services.IndexFieldServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="loggingServices"
class="com.doculibre.constellio.services.LoggingServicesImpl"
scope="singleton">
</bean>

<bean id="metaNameServices" class="com.doculibre.constellio.services.MetaNameServicesImpl"
scope="prototype">
</bean>

<bean id="rawContentServices"
class="com.doculibre.constellio.services.RawContentServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="recordCollectionServices"
class="com.doculibre.constellio.services.RecordCollectionServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="recordServices" class="com.doculibre.constellio.services.RecordServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="searchInterfaceConfigServices"
class="com.doculibre.constellio.services.SearchInterfaceConfigServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="searchResultFieldServices"
class="com.doculibre.constellio.services.SearchResultFieldServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="searchServices" class="com.doculibre.constellio.services.SearchServicesImpl"
scope="prototype">
</bean>

<bean id="solrConfigServices"
class="com.doculibre.constellio.services.SolrConfigServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="solrServices" class="com.doculibre.constellio.services.SolrServicesImpl"
scope="singleton">
</bean>

<bean id="skosIndexHelper"
class="com.doculibre.constellio.lucene.impl.SkosIndexHelperImpl"
scope="singleton">
</bean>

<bean id="skosServices" class="com.doculibre.constellio.services.SkosServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="statusServices"
class="com.doculibre.constellio.services.StatusServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="categorizationServices"
class="com.doculibre.constellio.services.CategorizationServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="synonymServices" class="com.doculibre.constellio.services.SynonymServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="tokenizerClassServices"
class="com.doculibre.constellio.services.TokenizerClassServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="userServices" class="com.doculibre.constellio.services.UserServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="keaModelServices"
class="com.doculibre.constellio.kea.services.KeaModelServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="favoriteDocumentServices"
class="com.doculibre.constellio.services.FavoriteDocumentServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="searchAlertServices"
class="com.doculibre.constellio.services.SearchAlertServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
<property name="alertEmailRenderer">
<bean class="com.doculibre.constellio.services.DefaultHtmlAlertEmailRenderer">
<property name="skinEmailColors">
<map>
<entry key="red" value="#BE1D1D"/>
<entry key="blue" value="#1A5EC3"/>
</map>
</property>
</bean>
</property>
</bean>

<bean id="realisedSearchServices"
class="com.doculibre.constellio.services.RealisedSearchServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="favoriteSearchServices"
class="com.doculibre.constellio.services.FavoriteSearchServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>

<bean id="emailServices"
class="com.doculibre.constellio.services.EmailServicesImpl"
scope="singleton">
<property name="smtpHost">
<value>relais.videotron.ca</value>
<!--            <value>smtp10.bellnet.ca</value>-->

</property>
<property name="smtpPort">
<value>25</value>
</property>
<property name="defaultFrom">
<value>baril.francis@gmail.com</value>
</property>
</bean>

<bean id="keaClassificationServices"
class="com.doculibre.constellio.kea.services.KeaClassificationServicesImpl"
scope="singleton">
</bean>

<bean id="autocompleteServices"
class="com.doculibre.constellio.services.AutocompleteServicesImpl"
scope="singleton">
</bean>

<bean id="copyFieldServices" class="com.doculibre.constellio.services.CopyFieldServicesImpl"
scope="prototype">
<constructor-arg>
<ref bean="entityManager" />
</constructor-arg>
</bean>
</beans>


接着是ConstellioSpringUtils.java工具类,获取spring容器里面的bean

/**
* Constellio, Open Source Enterprise Search
* Copyright (C) 2010 DocuLibre inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package com.doculibre.constellio.utils;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;

import com.doculibre.constellio.lucene.impl.FeaturedLinkIndexHelper;
import com.doculibre.constellio.lucene.impl.FreeTextTagIndexHelper;
import com.doculibre.constellio.lucene.impl.SkosIndexHelper;
import com.doculibre.constellio.plugins.PluginFactory;
import com.doculibre.constellio.plugins.api.beans.BeanFactoryPlugin;
import com.doculibre.constellio.services.ACLServices;
import com.doculibre.constellio.services.AnalyzerClassServices;
import com.doculibre.constellio.services.AnalyzerServices;
import com.doculibre.constellio.services.AuthenticationServices;
import com.doculibre.constellio.services.AuthorizationServices;
import com.doculibre.constellio.services.AutocompleteServices;
import com.doculibre.constellio.services.BackupServices;
import com.doculibre.constellio.services.CategorizationServices;
import com.doculibre.constellio.services.ClickLogEntryServices;
import com.doculibre.constellio.services.ClusteringServices;
import com.doculibre.constellio.services.CollectionPermissionServices;
import com.doculibre.constellio.services.ConnectorInstanceServices;
import com.doculibre.constellio.services.ConnectorManagerServices;
import com.doculibre.constellio.services.ConnectorTypeMetaMappingServices;
import com.doculibre.constellio.services.ConnectorTypeServices;
import com.doculibre.constellio.services.ConstellioInitServices;
import com.doculibre.constellio.services.CopyFieldServices;
import com.doculibre.constellio.services.CredentialGroupServices;
import com.doculibre.constellio.services.DistributedSolrServerServices;
import com.doculibre.constellio.services.ElevateServices;
import com.doculibre.constellio.services.EmailServices;
import com.doculibre.constellio.services.FacetServices;
import com.doculibre.constellio.services.FavoriteDocumentServices;
import com.doculibre.constellio.services.FavoriteSearchServices;
import com.doculibre.constellio.services.FeaturedLinkServices;
import com.doculibre.constellio.services.FederationServices;
import com.doculibre.constellio.services.FieldTypeClassServices;
import com.doculibre.constellio.services.FieldTypeServices;
import com.doculibre.constellio.services.FilterClassServices;
import com.doculibre.constellio.services.FreeTextTagServices;
import com.doculibre.constellio.services.GroupServices;
import com.doculibre.constellio.services.ImportExportServices;
import com.doculibre.constellio.services.IndexFieldServices;
import com.doculibre.constellio.services.LoggingServices;
import com.doculibre.constellio.services.MetaNameServices;
import com.doculibre.constellio.services.RawContentServices;
import com.doculibre.constellio.services.RealisedSearchServices;
import com.doculibre.constellio.services.RecordCollectionServices;
import com.doculibre.constellio.services.RecordServices;
import com.doculibre.constellio.services.SearchAlertServices;
import com.doculibre.constellio.services.SearchInterfaceConfigServices;
import com.doculibre.constellio.services.SearchResultFieldServices;
import com.doculibre.constellio.services.SearchServices;
import com.doculibre.constellio.services.SkosServices;
import com.doculibre.constellio.services.SolrConfigServices;
import com.doculibre.constellio.services.SolrServices;
import com.doculibre.constellio.services.StatusServices;
import com.doculibre.constellio.services.SynonymServices;
import com.doculibre.constellio.services.TokenizerClassServices;
import com.doculibre.constellio.services.UserServices;

public class ConstellioSpringUtils {

private static ApplicationContext applicationContext;

private static void loadApplicationContext() {
if (applicationContext == null) {
applicationContext = new ClassPathXmlApplicationContext("constellio.xml");
}
}

public static void setApplicationContext(ApplicationContext applicationContext) {
ConstellioSpringUtils.applicationContext = applicationContext;
}

@SuppressWarnings("unchecked")
public static final <T extends Object> T getBean(String name) {
loadApplicationContext();
return (T) applicationContext.getBean(name);
}

@SuppressWarnings("unchecked")
public static final <T extends Object> T getPluggableBean(String name) {
T bean;
BeanFactoryPlugin beanFactoryPlugin = PluginFactory.getPlugin(BeanFactoryPlugin.class);
if (beanFactoryPlugin != null) {
bean = (T) beanFactoryPlugin.getBean(name);
} else {
bean = (T) getBean(name);
}
return bean;
}

public static Resource[] getResources(String locationPattern) {
loadApplicationContext();
try {
return applicationContext.getResources(locationPattern);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public static Map<String, Object> getConfig() {
return getBean("config");
}

public static String getDictionaries() {
return (String) getConfig().get("dictionaries");
}

public static String getExternalServerURL() {
return (String) getConfig().get("externalServerUrl");
}

@SuppressWarnings("unchecked")
public static List<String> getFileDownloadDirs() {
return (List<String>) getConfig().get("fileDownloadDirs");
}

public static URL getDefaultConnectorManagerURL() {
String defaultConnectorManager = (String) getConfig().get("defaultConnectorManager");
try {
return new URL(defaultConnectorManager);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}

@SuppressWarnings("unchecked")
public static List<Locale> getSupportedLocales() {
List<Locale> supportedLocales = new ArrayList<Locale>();
List<String> supportedLanguages = (List<String>) getConfig().get("supportedLanguages");
for (String supportedLanguage : supportedLanguages) {
supportedLocales.add(new Locale(supportedLanguage));
}
return supportedLocales;
}

@SuppressWarnings("unchecked")
public static List<Locale> getSearchableLocales() {
List<Locale> searchableLocales = new ArrayList<Locale>();
List<String> searchableLanguages = (List<String>) getConfig().get("searchableLanguages");
if (searchableLanguages != null) {
for (String searchableLanguage : searchableLanguages) {
searchableLocales.add(new Locale(searchableLanguage));
}
}
return searchableLocales;
}

public static Locale getDefaultLocale() {
return getSupportedLocales().get(0);
}

public static ACLServices getACLServices() {
return getPluggableBean("aclServices");
}

public static List<String> getAvailablePluginNames() {
return getBean("availablePluginNames");
}

public static AnalyzerClassServices getAnalyzerClassServices() {
return getPluggableBean("analyzerClassServices");
}

public static AnalyzerServices getAnalyzerServices() {
return getPluggableBean("analyzerServices");
}

public static AuthenticationServices getAuthenticationServices() {
return getPluggableBean("authenticationServices");
}

public static AuthorizationServices getAuthorizationServices() {
return getPluggableBean("authorizationServices");
}

public static BackupServices getBackupServices() {
return getPluggableBean("backupServices");
}

public static ClickLogEntryServices getClickLogEntryServices() {
return getPluggableBean("clickLogEntryServices");
}

public static ClusteringServices getClusteringServices() {
return getPluggableBean("clusteringServices");
}

public static ConnectorInstanceServices getConnectorInstanceServices() {
return getPluggableBean("connectorInstanceServices");
}

public static ConnectorManagerServices getConnectorManagerServices() {
return getPluggableBean("connectorManagerServices");
}

public static ConnectorTypeMetaMappingServices getConnectorTypeMetaMappingServices() {
return getPluggableBean("connectorTypeMetaMappingServices");
}

public static ConnectorTypeServices getConnectorTypeServices() {
return getPluggableBean("connectorTypeServices");
}

public static ConstellioInitServices getConstellioInitServices() {
return getPluggableBean("constellioInitServices");
}

public static CredentialGroupServices getCredentialGroupServices() {
return getPluggableBean("credentialGroupServices");
}

public static ElevateServices getElevateServices() {
return getPluggableBean("elevateServices");
}

public static FacetServices getFacetServices() {
return getPluggableBean("facetServices");
}

public static FeaturedLinkIndexHelper getFeaturedLinkIndexHelper() {
return getPluggableBean("featuredLinkIndexHelper");
}

public static FeaturedLinkServices getFeaturedLinkServices() {
return getPluggableBean("featuredLinkServices");
}

public static FederationServices getFederationServices() {
return getPluggableBean("federationServices");
}

public static FieldTypeClassServices getFieldTypeClassServices() {
return getPluggableBean("fieldTypeClassServices");
}

public static FieldTypeServices getFieldTypeServices() {
return getPluggableBean("fieldTypeServices");
}

public static FilterClassServices getFilterClassServices() {
return getPluggableBean("filterClassServices");
}

public static FreeTextTagServices getFreeTextTagServices() {
return getPluggableBean("freeTextTagServices");
}

public static FreeTextTagIndexHelper getFreeTextTagIndexHelper() {
return getPluggableBean("freeTextTagIndexHelper");
}

public static GroupServices getGroupServices() {
return getPluggableBean("groupServices");
}

public static CollectionPermissionServices getCollectionPermissionServices() {
return getPluggableBean("collectionPermissionServices");
}

public static ImportExportServices getImportExportServices() {
return getPluggableBean("importExportServices");
}

public static IndexFieldServices getIndexFieldServices() {
return getPluggableBean("indexFieldServices");
}

public static MetaNameServices getMetaNameServices() {
return getPluggableBean("metaNameServices");
}

public static RawContentServices getRawContentServices() {
return getPluggableBean("rawContentServices");
}

public static RecordCollectionServices getRecordCollectionServices() {
return getPluggableBean("recordCollectionServices");
}

public static RecordServices getRecordServices() {
return getPluggableBean("recordServices");
}

public static SearchInterfaceConfigServices getSearchInterfaceConfigServices() {
return getPluggableBean("searchInterfaceConfigServices");
}

public static LoggingServices getLoggingServices() {
return getPluggableBean("loggingServices");
}

public static SearchResultFieldServices getSearchResultFieldServices() {
return getPluggableBean("searchResultFieldServices");
}

public static SearchServices getSearchServices() {
return getPluggableBean("searchServices");
}

public static SkosIndexHelper getSkosIndexHelper() {
return getPluggableBean("skosIndexHelper");
}

public static SkosServices getSkosServices() {
return getPluggableBean("skosServices");
}

public static SolrServices getSolrServices() {
return getPluggableBean("solrServices");
}

public static SolrConfigServices getSolrConfigServices() {
return getPluggableBean("solrConfigServices");
}

public static StatusServices getStatusServices() {
return getPluggableBean("statusServices");
}

public static CategorizationServices getCategorizationServices() {
return getPluggableBean("categorizationServices");
}

public static SynonymServices getSynonymServices() {
return getPluggableBean("synonymServices");
}

public static TokenizerClassServices getTokenizerClassServices() {
return getPluggableBean("tokenizerClassServices");
}

public static UserServices getUserServices() {
return getPluggableBean("userServices");
}

public static AutocompleteServices getAutocompleteServices() {
return getPluggableBean("autocompleteServices");
}

public static CopyFieldServices getCopyFieldServices() {
return getPluggableBean("copyFieldServices");
}

public static FavoriteDocumentServices getFavoriteDocumentServices() {
return getPluggableBean("favoriteDocumentServices");
}

public static SearchAlertServices getSearchAlertServices() {
return getPluggableBean("searchAlertServices");
}

public static RealisedSearchServices getRealisedSearchServices() {
return getPluggableBean("realisedSearchServices");
}

public static FavoriteSearchServices getFavoriteSearchServices() {
return getPluggableBean("favoriteSearchServices");
}

public static EmailServices getEmailServices() {
return getPluggableBean("emailServices");
}

public static DistributedSolrServerServices getDistributedSolrServerServices() {
return getPluggableBean("distributedSolrServerServices");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐