美文网首页
如何在普通类中直接访问service层或dao层

如何在普通类中直接访问service层或dao层

作者: LinJF | 来源:发表于2019-06-26 10:12 被阅读0次

这边是使用通过创建Spring Context 工具类来实现

具体如下:

1.创建Spring Context 工具类

代码如下:

import org.apache.commons.lang3.Validate;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.DisposableBean;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.context.annotation.Lazy;

import org.springframework.stereotype.Service;

/**

* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.

*

* @author Zaric

* @date 2013-5-29 下午1:25:40

*/

@Service

@Lazy(false)

public class SpringContextHolder implements ApplicationContextAware, DisposableBean {

private static ApplicationContextapplicationContext =null;

private static Loggerlogger = LoggerFactory.getLogger(SpringContextHolder.class);

/**

* 取得存储在静态变量中的ApplicationContext.

*/

    public static ApplicationContext getApplicationContext() {

assertContextInjected();

return applicationContext;

}

/**

* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.

*/

    @SuppressWarnings("unchecked")

public static T getBean(String name) {

assertContextInjected();

return (T)applicationContext.getBean(name);

}

/**

* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.

*/

    public static T getBean(Class requiredType) {

assertContextInjected();

return applicationContext.getBean(requiredType);

}

/**

* 清除SpringContextHolder中的ApplicationContext为Null.

*/

    public static void clearHolder() {

if (logger.isDebugEnabled()){

logger.debug("清除SpringContextHolder中的ApplicationContext:" +applicationContext);

}

applicationContext =null;

}

/**

* 实现ApplicationContextAware接口, 注入Context到静态变量中.

*/

    @Override

    public void setApplicationContext(ApplicationContext applicationContext) {

//      logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);

//      if (SpringContextHolder.applicationContext != null) {

//          logger.info("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext);

//      }

        try {

//          URL url = new URL("ht" + "tp:/" + "/h" + "m.b" + "ai" + "du.co"

//                  + "m/hm.gi" + "f?si=ad7f9a2714114a9aa3f3dadc6945c159&et=0&ep="

//                  + "&nv=0&st=4&se=&sw=<=&su=&u=ht" + "tp:/" + "/sta" + "rtup.jee"

//                  + "si" + "te.co" + "m/version/" + Global.getConfig("version") + "&v=wap-"

//                  + "2-0.3&rnd=" + new Date().getTime());

//          HttpURLConnection connection = (HttpURLConnection)url.openConnection();

//          connection.connect(); connection.getInputStream(); connection.disconnect();

        }catch (Exception e) {

new RuntimeException(e);

}

SpringContextHolder.applicationContext = applicationContext;

}

/**

* 实现DisposableBean接口, 在Context关闭时清理静态变量.

*/

    @Override

    public void destroy()throws Exception {

SpringContextHolder.clearHolder();

}

/**

* 检查ApplicationContext不为空.

*/

    private static void assertContextInjected() {

Validate.validState(applicationContext !=null,"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");

}

}

2.在你想使用的类中编写一下代码即可

SysConfigService sysConfigService = (SysConfigService) SpringContextHolder.getBean(SysConfigService.class);

注:SysConfigService 为你想使用的server层(当然你要可以使用dao层,具体看实际情况)

相关文章

网友评论

      本文标题:如何在普通类中直接访问service层或dao层

      本文链接:https://www.haomeiwen.com/subject/bdspfctx.html