当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java进阶

Spring中的service之间如何调用

    在基于struts+spring+hibernate的开发框架下,一般service都是直接通过在Struts的action中getBean("yourServiceName")来获取,那么如果在serviceA中想调用serviceB中的方法该如何呢?

    直接new 一个serviceB是不行的,因为里面可能还有依赖注入的dao等其他本来需要容器管理的资源,可以象在action中一样getBean()么?

    获得applicationContext就可以了:

AppContext : public class AppContext {
    private static ApplicationContext applicationContext;
    
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    public static void setApplicationContext(
            ApplicationContext applicationContext) {
        AppContext.applicationContext = applicationContext;
    }
}


SpringService:

public class SpringBeanService {
    private static SpringBeanService instance;

    private ApplicationContext applicationContext;

    public static synchronized SpringBeanService getInstance() {
        if (instance == null) {
            instance = new SpringBeanService();
        }
        return instance;
    }

    public ApplicationContext getApplicationContext() {
        return this.applicationContext;
    }

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

    public UserService getUserService(){
        return (UserService)AppContext.getApplicationContext().getBean("userService");
    }
    
    }



ApplicationContext的初始化:

public class ConfigLoadListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent contextEvent) {  
        try {
            WebApplicationContext context =WebApplicationContextUtils.getRequiredWebApplicationContext(contextEvent.getServletContext());
            AppContext.setApplicationContext(context);

            //读配置
            try {
                ServletContext context2=contextEvent.getServletContext();
                String path=context2.getInitParameter("setting.properties");
                InputStream in =context2.getResourceAsStream(path);
                Properties properties = new Properties();
                properties.load(in);
                GlobalConstant.setCmdbProperties(properties);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (HibernateException e) {
            System.out.println("系统无法初始化,异常退出");
            System.out.println(e);
        }
    }
   
    public void contextDestroyed(ServletContextEvent contextEvent) {
    }
}

 

相关内容
赞助商链接