方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContext.xml");
ac.getBean("beanId");
说明:
这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
方法二:通过Spring提供的工具类获取ApplicationContext对象
代码:
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
ac1.getBean("beanId");
ac2.getBean("beanId");
说明:
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。上面两个工具方式的区别 是,前者在获取失败时抛出异常,后者返回null。
其 中servletContext sc可 以具体换成servlet.getServletContext()或者this.getServletContext()或者request.getSession().getServletContext();
另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext对象:
WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
方法三:继承自抽象类ApplicationObjectSupport
说明:
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext对象注入。
方法四:继承自抽象类WebApplicationObjectSupport
说明:
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
方法五:实现接口ApplicationContextAware
说明:
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。
以上方法适合不同的情况,请根据具体情况选用相应的方法。
这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能 的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。
然 后在Action中 编写如下代码得到Context,(我是覆盖了Struts Action的setServlet方法,也许还有更好的方法)。
public void setServlet(ActionServlet servlet){
super.setServlet(servlet);
ServletContext servletContext = servlet.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
// get yours beans
}
我需要在spring的bean中直接获取,这下可和我们常规的操作有些不同,因为spring的bean都是pojo的。根本见不着servletconfig和servletcontext的影子。
这里我 需要指出spring给 我们提供了两个接口:org.springframework.web.context.ServletContextAware和
org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext了.
代码如下:
publicclassDicBean
implementsServletContextAware
{privateServletContext servletContext
;publicvoidsetServletContext
(ServletContext sc
){this.servletContext
=sc
;System.out
.println("项目的绝对路径为:"+servletContext
.getRealPath
("/"));}}
分享到:
相关推荐
微信控制器类是用@Weixin注解的普通类,与sprngmvc里面的controller很类似,方法的执行也很类似。我们在com.telecomjs.yc.controller包下建一个java类WeixinController,如下: package ...
包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
在spring框架中你可以使用IOc三种方案 1 配置文件的注入 2 注解的方式注入 3 不需要配置文件注入 建立一个工具类使用注解的方式** 3. **在数据反问层中你可以使用的是MyBatis框架。在数据访问层中正对MyBatis框架有...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...
在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter...
Spring Boot 学习笔记,包括底层实现原理及...12. Spring boot 普通类调用 Bean 13. spring boot 使用模板引擎 14. Spring boot 集成 JSP 15. Spring boot 集成 servlet 16. Spring boot 集成 Fliter 和 Linstener
mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...
@Bean注解在方法上,声明当前方法的返回值为一个Bean AOP @Aspect 声明是一个切面 拦截规则@After @Before @Around PointCut JoinPoint Spring常用配置 Bean的Scope Singleton ...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
Spring Bean依赖项查找规则 特殊实现类的bean注册 自动注册的bean如何实现spring的init-method方法 声明bean的简单属性 使用@SpringBeanFrom DIY你需要的bean Spring模块注解 第 6 章 反射调用私有方法或JDK代理...
主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...
配置文件init部分声明那些用于建立远程bean和在方法调用中转换bean的类.这部分是可选择性配置的,多数情况下可以不必使用它,如果你想定义一个新的creator或者converter那么就必须在部分中声明,but do double check on...
进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...
由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...
{8.3}创建线程的两种方法}{123}{section.8.3} {8.4}Runnable}{123}{section.8.4} {8.5}Sleep阻塞与打断唤醒}{124}{section.8.5} {8.5.1}sleep与wait的差异}{124}{subsection.8.5.1} {8.6}IO阻塞}{126}{section....
Spring Web MVC框架 i. 26.1.1. Spring MVC自动配置 ii. 26.1.2. HttpMessageConverters Spring Boot参考指南 3 iii. 26.1.3. MessageCodesResolver iv. 26.1.4. 静态内容 v. 26.1.5. 模板引擎 vi. 26.1.6. 错误...