- 浏览: 932916 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
在 WEB 开发中,获取到由 Spring 进行管理的某些 Bean,通常采用下面方式来获取
1、通过set注入方式
private ProjectStageHandler projectStageHandler;
public void setProjectStageHandler(ProjectStageHandler projectStageHandler) {
this.projectStageHandler = projectStageHandler;
}
2、通过注解方式
@Resource
private ProjectStageHandler projectStageHandler;
今天遇到 需要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean,在这里和大家分享一下,WEB 开发中,怎么获取 ApplicationContext ( 如有不正确之处还请指点)
查找工程有没有这种实现,功夫没有白费还真找到了大致实现方式如下:
3、首先web.xml配置
<listener>
<listener-class>org.common.xxxServletContextListener</listener-class>
</listener>
接着xxxServletContextListener.java
public class xxxServletContextListener implements ServletContextListener {
//ServletContext创建时调用该方法
public void contextInitialized(ServletContextEvent arg0){
ServletContext context= arg0.getServletContext();
System.out.println("监听器启动。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
ApplicationCtx.init(context);
}
//ServletContext销毁时调用该方法
public void contextDestroyed(ServletContextEvent sce){
System.out.println("ServletContext销毁");
}
}
ApplicationCtx .java
public class ApplicationCtx {
public static ApplicationContext ctx;
public static ApplicationContext getCtx(){
return ctx;
}
public static void init(ServletContext sc){
if(ctx==null){
ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
}
}
}
通过 ApplicationCtx.getCtx().getBean("xxx"); 就可以获到想要的bean啦
想想这种方式有点太罗嗦和麻烦,还有没有更简单的方式哪?有当然有。
4、首先要在spring.xml中加上
<bean id="applicationContext" class="org.wy.util.AppliactionContextHelper"/>
当对AppliactionContextHelper实例时就自动设置applicationContext,以便后来可直接用applicationContext
public class AppliactionContextHelper implements ApplicationContextAware {
private static ApplicationContext applicationContext; //Spring应用上下文环境
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
* @param applicationContext
* @throws BeansException
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AppliactionContextHelper.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
/**
* 获取类型为requiredType的对象
* 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
* @param name bean注册名
* @param requiredType 返回对象类型
* @return Object 返回requiredType类型对象
* @throws BeansException
*/
public static Object getBean(String name, Class requiredType) throws BeansException {
return applicationContext.getBean(name, requiredType);
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
}
通过AppliactionContextHelper.getBean("xxx");就可以获到想要的bean啦
5、
利用ClassPathXmlApplicationContext
可以从classpath中读取XML文件
(1) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao)context.getBean("userDao");
(2) ClassPathXmlApplicationContext resource = new ClassPathXmlApplicationContext(new String[]{"applicationContext-ibatis-oracle.xml","applicationContext.xml","applicationContext-data-oracle.xml"});
BeanFactory factory = resource;
factory.getBean("xxx");
这种方式只适合非web中的应用程序中。
--------------------------------------------------------------------------------------------------------------------------------
转载:
获得spring里注册Bean的四种方法,特别是第三种方法,简单:
一:方法一(多在struts框架中)继承BaseDispatchAction
import com.mas.wawacommunity.wap.service.UserManager;
public class BaseDispatchAction extends DispatchAction {
/**
* web应用上下文环境变量
*/
protected WebApplicationContext ctx;
protected UserManager userMgr;
/**
* 获得注册Bean
* @param beanName String 注册Bean的名称
* @return
*/
protected final Object getBean(String beanName) {
return ctx.getBean(beanName);
}
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) {
return mapping.findForward("index");
}
public void setServlet(ActionServlet servlet) {
this.servlet = servlet;
this.ctx = WebApplicationContextUtils.getWebApplicationContext(servlet.getServletContext());
this.userMgr = (UserManager) getBean("userManager");
}
}
二:方法二实现BeanFactoryAware
一定要在spring.xml中加上:
<bean id="serviceLocator" class="com.am.oa.commons.service.ServiceLocator" singleton="true" />
当对serviceLocator实例时就自动设置BeanFactory,以便后来可直接用 beanFactory
public class UserAction extends BaseAction implements Action,ModelDriven{
private Users user = new Users();
protected ServiceLocator service = ServiceLocator.getInstance();
UserService userService = (UserService)service.getService("userService");
public String execute() throws Exception {
return SUCCESS;
}
public Object getModel() {
return user;
}
public String getAllUser(){
HttpServletRequest request = ServletActionContext.getRequest();
List ls=userService.LoadAllObject( Users.class );
request.setAttribute("user",ls);
this.setUrl("/yonghu.jsp");
return SUCCESS;
}
}
三:方法三实现ApplicationContextAware,一定要在spring.xml中加上:
<bean id="SpringContextUtil " class="com.am.oa.commons.service.SpringContextUtil " singleton="true" />
当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext; //Spring应用上下文环境
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
* @param applicationContext
* @throws BeansException
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
/**
* 获取类型为requiredType的对象
* 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
* @param name bean注册名
* @param requiredType 返回对象类型
* @return Object 返回requiredType类型对象
* @throws BeansException
*/
public static Object getBean(String name, Class requiredType) throws BeansException {
return applicationContext.getBean(name, requiredType);
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
}
action调用:
package com.anymusic.oa.webwork;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.anymusic.oa.commons.service.ServiceLocator;
import com.anymusic.oa.hibernate.pojo.Role;
import com.anymusic.oa.hibernate.pojo.Users;
import com.anymusic.oa.spring.IUserService;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ModelDriven;
public class UserAction extends BaseAction implements Action,ModelDriven{
private Users user = new Users();
//不用再加载springContext.xml 文件,因为在web.xml中配置了,在程序中启动是就有了.
UserService userService = (UserService) SpringContextUtil.getBean("userService");
public String execute() throws Exception {
return SUCCESS;
}
public Object getModel() {
return user;
}
public String getAllUser(){
HttpServletRequest request = ServletActionContext.getRequest();
List ls=userService.LoadAllObject( Users.class );
request.setAttribute("user",ls);
this.setUrl("/yonghu.jsp");
return SUCCESS;
}
}
四.通过servlet 或listener设置spring的 ApplicationContext,以便后来引用.
注意分别extends ContextLoaderListener和ContextLoaderServlet .然后就可用SpringContext 来getBean.
覆盖原来在web.xml中配置的listener或servlet.
public class SpringContext {
private static ApplicationContext applicationContext; //Spring应用上下文环境
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}
public class SpringContextLoaderListener extends ContextLoaderListener{ //
public void contextInitialized(ServletContextEvent event) {
super.contextInitialized(event);
SpringContext.setApplicationContext(
WebApplicationContextUtils.getWebApplicationContext(event.getServletContext())
);
}
}
public class SpringContextLoaderServlet extends ContextLoaderServlet {
private ContextLoader contextLoader;
public void init() throws ServletException {
this.contextLoader = createContextLoader();
SpringContext.setApplicationContext(this.contextLoader.initWebApplicationContext(getServletContext()));
}
}
发表评论
-
properties 文件 属性值换行
2013-09-24 16:33 2205在项目开发中遇到属性文件propertie ... -
扩展PropertyPlaceholderConfigurer对prop文件中的属性加密
2013-09-24 13:53 7153转载:http://my.oschina.net/noah ... -
精通有状态vs无状态(Stateful vs Stateless)—Immutable模式之姐妹篇
2013-09-10 18:06 2230今天给别人解释 Stateful vs Stateless ... -
Spring的DTD验证
2013-03-28 15:45 3823转载:http://a123159521.iteye. ... -
用spring annotation声明的bean,当打包在jar中时,无法被扫描到
2012-10-16 16:33 1274我们项目是由N个工程组成的,外围工程是web工程,内部的工程打 ... -
what’s new in spring 3
2012-10-15 21:35 1233spring3发布已经很久了,但现在为止还不太清楚spring ... -
利用AbstractRoutingDataSource实现动态数据源切换(Spring+Ibatis)
2012-10-14 15:49 3549Spring+Ibatis 与 Spring+Hibernat ... -
利用AbstractRoutingDataSource实现动态数据源切换 (二、Spring+Hibernate)
2012-10-14 13:55 2817用spring 的AbstractRoutingData ... -
利用AbstractRoutingDataSource实现动态数据源切换 (一、Spring+Hibernate)
2012-10-14 13:26 23478在Spring 2.0.1中引入了AbstractR ... -
Spring中的destroy-method方法
2012-05-20 12:29 22093转载:http://technoboy.iteye.com/b ... -
Spring事务(一)
2012-02-26 17:48 991一、Spring中定义了5中不同的事务隔离级别 1 ... -
Spring容器启动过程
2011-09-17 22:58 1834一、一切从手动启动IoC ... -
Spring AOP续
2011-09-03 16:37 1454三 AOP的实现方式---Proxy Spring默认使用J2 ... -
Spring AOP
2011-09-03 15:35 1441前段时间使用AOP做日志拦截,由于很长时间没有使用过 ...
相关推荐
在独立应用程序中,通过手工初始化 Spring 容器,可以使用以下方式获取 ApplicationContext 对象: `ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");` `ac.getBean("bean...
但不论使用哪种方式,理解Spring在Web项目中的集成原理和组件工作方式都是非常重要的。 总之,Spring为Web开发提供了强大而灵活的框架,通过合理集成和配置,可以构建出高效、可维护的Web应用。
本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...
Spring提供了`ContextLoader`和`WebApplicationContextUtils`等工具类,可以从当前线程或ServletContext中获取ApplicationContext。 ```java // 在非Web应用中 ApplicationContext ac = ContextLoader....
当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...
根据提供的文件信息,我们可以总结出以下关于Spring框架中获取Bean的几种方法的相关知识点: ### Spring框架简介 Spring框架是一款开源的轻量级Java EE应用程序开发框架,它通过提供一系列强大的功能来简化Java...
"Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序中最流行的框架之一,它提供了许多功能强大且灵活的功能之一就是Bean管理机制。Bean是Spring框架的核心组件,用于管理应用程序中的业务逻辑。在...
3. **Web**:Spring的Web模块提供了用于构建Web应用程序的功能,包括Spring MVC(Model-View-Controller)框架,它是一种轻量级的Web应用框架,可以实现高效且灵活的Web应用开发。 在描述中提到的"aop所需的jar包...
整合Spring和Struts是Web开发中常见的需求,这两者都是Java Web开发的重要框架。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,以及对其他框架的良好集成,而Struts则是一个专注于MVC模式的轻量级框架...
获取Bean主要有以下几种方式: 1. **通过Bean的ID**:使用`ApplicationContext`的`getBean()`方法,传入Bean的ID来获取实例。 2. **自动装配(Autowired)**:使用`@Autowired`注解,Spring会自动匹配类型匹配的...
Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、模块化和松耦合的应用程序提供了一种强大的方式。Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译...
CXF的核心是org.apache.cxf.Bus,它类似于Spring框架中的ApplicationContext,提供了灵活的插拔式架构。CXF的Bus默认使用SpringBusFactory类创建,并且有一个默认ID为“cxf”的BUS。Apache CXF的出现使得Java Web...
- **几种依赖注入模式的对比总结**:不同的注入方式适用于不同的场景。例如,构造函数注入更适用于强制依赖的情况,而setter注入则更适合于可选依赖。 - **Spring Bean封装机制** - **BeanWrapper**:提供了一种...
1. **Spring的Bean管理**:Spring通过XML配置或注解方式管理对象(Bean),可以将Web服务实现类作为Spring Bean,这样就能够在Spring容器中初始化、管理和销毁Web服务,确保了服务的生命周期控制。 2. **Autowiring...
切面可以被编织到应用程序的其他对象中,提供了一种解耦的方式。 3. **Spring JDBC和ORM**:Spring提供了JDBC抽象层,简化了数据库访问,减少了代码量,同时支持JPA、Hibernate、MyBatis等ORM框架的集成,使得数据...
Spring框架是Java开发中广泛使用的轻量级框架,它以其依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)为核心,极大地简化了企业级应用的开发工作。"Spring4 Hello...
- 除了上述几种情况外,还可以在其他的非Action类中使用这种方式获取到所需的DAO对象。 #### 注意事项 1. **确保ApplicationContext的存在**: - 在使用`getRequiredWebApplicationContext`方法前,要确保...
Spring提供了几种不同的Bean封装机制,包括: - **Bean Wrapper**:这是一个包装器类,用于封装一个对象及其属性,提供了一种访问和修改Bean属性的方法。 - **Bean Factory**:这是Spring的最基本容器,负责实例化...
SSH三大框架,即Struts、Spring和Hibernate,是Java Web开发中的常用技术组合,它们各自负责不同的职责:Struts作为MVC模式中的Controller层,处理用户请求并转发到相应的业务逻辑;Spring则作为核心容器,负责依赖...