怎么在类中调用spring web容器中定义得bean
2008-09-27 15:26
246 查看
最近使用spring web框架作项目,很是喜欢spring web优雅得框架风格。
如果你得bo类全部是在controller中调用,一切都很简单,唯一需要补充得是象struts得AbstractMultiActionFormController简单得多请求得controller,也可能是我用struts用得太习惯了,还没有转变思想,不过这样得好处是防止controller类得扩散。
今天准备写个简化得portal应用,这样再页面展示portlet模块时,准备采用tag来加载数据,tag中要调用bo中得方法,bo又调用dao得方法,这样就脱离了spring web得DispatcherServlet得体系。
记得以前看过spring得资料,它得DI容器,是有层次关系得,常识告诉我们,它一定会在DispatcherServlet启动得时候,把这个di类加载到servletContext中,于是按照网上流行得做法
ApplicationContext ctx = null;
if (ctx == null)
{
ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
}
return ctx.getBean(name);
发现那不到在*-servlet.xml中定义得bean ,猜想肯定这种写法只能到到最顶级得di中定义得bean,也就是applicationContext.xml中定义得bean,为了拿到spring web中di得bean ,没办法,看代码,找到DispatcherServlet类,由于我是用记事本看代码,猜想肯定是放到了servletContext中,并且肯定是ApplicationContext 得对象,这种事情,肯定是在init方法里作得了,首先看这个方法。并没有看到想看到得代码,但是看到initStrategies(ApplicationContext context)使作为参数传进来得,于是看它得父类FrameworkServlet
也使看init得方法initServletBean
发现String attrName = getServletContextAttributeName();
getServletContext().setAttribute(attrName, wac);得代码,可以看出关键字是org.springframework.web.servlet.FrameworkServlet.CONTEXT.加servlet得名字,在我这里是wingsite
哦~这下可以测试了
WebApplicationContext wac = (WebApplicationContext)pageContext.getServletContext().getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.wingsite");
net.wingsite.sysadmin.service.UserManager userManager = (net.wingsite.sysadmin.service.UserManager)wac.getBean("userManager");
成功获得想要得bean,为了防止下次重复看代码,记录下来,
当然还有更简单得方式
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource); 但是这样就自己构造了factroy对象,虽然能达到目的,但是浪费了很多资源,而且同一个项目维护了2个体系得spring DI
如果你得bo类全部是在controller中调用,一切都很简单,唯一需要补充得是象struts得AbstractMultiActionFormController简单得多请求得controller,也可能是我用struts用得太习惯了,还没有转变思想,不过这样得好处是防止controller类得扩散。
今天准备写个简化得portal应用,这样再页面展示portlet模块时,准备采用tag来加载数据,tag中要调用bo中得方法,bo又调用dao得方法,这样就脱离了spring web得DispatcherServlet得体系。
记得以前看过spring得资料,它得DI容器,是有层次关系得,常识告诉我们,它一定会在DispatcherServlet启动得时候,把这个di类加载到servletContext中,于是按照网上流行得做法
ApplicationContext ctx = null;
if (ctx == null)
{
ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
}
return ctx.getBean(name);
发现那不到在*-servlet.xml中定义得bean ,猜想肯定这种写法只能到到最顶级得di中定义得bean,也就是applicationContext.xml中定义得bean,为了拿到spring web中di得bean ,没办法,看代码,找到DispatcherServlet类,由于我是用记事本看代码,猜想肯定是放到了servletContext中,并且肯定是ApplicationContext 得对象,这种事情,肯定是在init方法里作得了,首先看这个方法。并没有看到想看到得代码,但是看到initStrategies(ApplicationContext context)使作为参数传进来得,于是看它得父类FrameworkServlet
也使看init得方法initServletBean
发现String attrName = getServletContextAttributeName();
getServletContext().setAttribute(attrName, wac);得代码,可以看出关键字是org.springframework.web.servlet.FrameworkServlet.CONTEXT.加servlet得名字,在我这里是wingsite
哦~这下可以测试了
WebApplicationContext wac = (WebApplicationContext)pageContext.getServletContext().getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.wingsite");
net.wingsite.sysadmin.service.UserManager userManager = (net.wingsite.sysadmin.service.UserManager)wac.getBean("userManager");
成功获得想要得bean,为了防止下次重复看代码,记录下来,
当然还有更简单得方式
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource); 但是这样就自己构造了factroy对象,虽然能达到目的,但是浪费了很多资源,而且同一个项目维护了2个体系得spring DI
相关文章推荐
- 随web容器启动Java类,调用spring容器中的的bean及其方法
- 随web容器启动Java类,调用spring容器中的的bean及其方法
- java web中如何获取spring容器中定义的bean----WebApplicationContext的使用
- web后台守护线程如何获得spring容器中的bean
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种
- 在web容器中获取spring容器中的bean对象
- 获取spring容器,以访问容器中定义的其他bean
- 如何让servelt和Filter注入到spring容器或者在servlet中调用spring中的bean
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种
- spring源码学习之路---IOC容器初始化要义之bean定义载入(四)
- SPRING中BEAN注入成功,可是启动WEB服务器,调用方法时,BEAN全是空,NullpointerException
- JSP页面调用Spring容器注入的Bean
- Spring源码学习IOC(3):IoC容器载入Bean定义资源文件
- BeanFactory到WebApplicationContext的结构 以及bean和spring容器的关系
- web程序中在jsp中调用spring 容器下的service
- Quartz任务中调用Spring容器中bean及动态调度任务
- 【Spring】初始化Spring IoC容器(非Web应用),并获取Bean
- Strategy 策略模式 在 Spring 开发中的应用 包括事务管理,日志管理(logger),IoC容器根据bean定义的内容实例化等
- spring技术内幕3-IOC容器载入Bean定义资源
- Spring-Context之四:Spring容器及bean的定义