项目在用spring,这部分没学好,只好上网自学了。找到一篇不错的比较spring生成bean的几种方式,转一下:
方法一:在初始化时保存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了 .
代码如下:
public class
DicBean implements ServletContextAware{
private
ServletContext servletContext;
public void
setServletContext(ServletContext sc) {
this.servletContext=sc;
System.out.println("项目的绝对路径为:"+servletContext.getRealPath("/"));
}
}
// ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","spring-xxxxx.xml"});
// BeanFactory factory = (BeanFactory)context;
// MonitorServer ce = (MonitorServer) factory.getBean("monitorServer");
类似于上面的这种,通过种种方式得到测试中都遇到资源耗尽的严重bug,
于是找高手请教,得到如下解决方法:而且效率很高,很易用。下面是代码L
package org.company.xxx;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
*
* 获取spring容器,以访问容器中定义的其他bean
* @author lyltiger
* @since MOSTsView 3.0 2009-11-16
*/
public class SpringContextUtil implements ApplicationContextAware {
// Spring应用上下文环境
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
* 这里重写了bean方法,起主要作用
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}
z只要将其类放在工程中的合适位置,直接用类名使用,无论何时何地……
使用:
java类中:
MonitorServer md =
(MonitorServer)SpringContextUtil.getBean("monitorServer");//bean的名称
spring配置文件中:
<bean id="monitorServer"
class="com.company.xxxxx.MonitorServer">
<property name="dataSource" ref="dataSource" />
</bean>
这样就可以得到我们想要的bean了,里面的方法随意调用,得到我们想要的数据。
OK!
分享到:
相关推荐
Spring会调用指定的静态方法生成Bean实例。尽管这种方式可行,但由于涉及静态方法,可能导致测试和依赖注入复杂,所以使用较少。 3. 实例工厂创建: 相比静态工厂,实例工厂创建更为灵活,但同时也更复杂。在这种...
以下将详细介绍Spring在代码中获取bean的几种主要方法: 1. **`ApplicationContext` 接口** `ApplicationContext` 是Spring中最常用的接口之一,它提供了获取Bean的多种方法。例如,`getBean(String beanName)` ...
在实际开发中,选择哪种Bean复制框架应根据项目需求来决定。如果对性能要求较高,且可以接受额外的配置工作,Cglib可能是最佳选择。而如果只是简单地在服务间传递数据,Apache BeanUtils或Spring BeanUtils则足够...
"Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序中最流行的框架之一,它提供了许多功能强大且灵活的功能之一就是Bean管理机制。Bean是Spring框架的核心组件,用于管理应用程序中的业务逻辑。在...
Spring Boot Starter是一种便利的模块化方式,它允许开发者通过添加依赖来快速启动特定的功能。例如,如果一个项目需要使用数据访问功能,只需要引入`spring-boot-starter-data-jpa`依赖即可。Mica-auto的角色就是...
依赖注入可以通过以下几种方式完成: - 构造器注入(Constructor Injection) - Setter注入(Setter Injection) - 字段注入(Field Injection) - 接口注入(Interface Injection) 12、区分构造函数注入和setter...
在IT行业中,生成二维码和条形码是常见的数据表示与传输方式,特别是在移动支付、物流追踪、产品标识等领域。SpringBoot作为一个轻量级的Java框架,使得开发人员能够快速构建微服务应用。本资源包专注于在SpringBoot...
在Spring框架中,工厂模式是核心的组件创建方式,它负责生成并管理Bean。Spring的IoC(Inversion of Control,控制反转)容器就是通过工厂模式来工作的,它使用了工厂方法来创建对象,实现了对象的创建与业务逻辑的...
在Spring框架中,Bean的实例化方式主要有两种:构造方式实例化和工厂方式实例化。构造方式实例化是通过构造方法对Bean进行实例化,包括无参构造和有参构造两种形式。工厂方式实例化是通过调用自定义的工厂方法对Bean...
Java代码生成工具是一种高效开发辅助软件,主要用于自动化生成基于Java技术栈的Web应用程序代码,尤其针对Struts2.1.8、Spring2.5和Hibernate3这三个经典框架的集成应用。这样的工具能够显著提高开发效率,减少手动...
有关于Spring,我们最常用的两个功能就是IOC和AOP,前几篇文章从源码级别介绍了Spring容器如何为我们生成bean及bean之间的依赖关系 下面我们接着来看AOP的源码实现。 有关于AOP,我们在面试中也被无数次问到...
本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...
这种集成方式不仅能够充分利用Spring强大的依赖注入和面向切面编程的功能,还能借助Axis2的强大功能构建高效稳定的Web服务。 #### 二、关键概念解释 **1. Apache Axis2:** - Apache Axis2是一个开源的Web服务栈...
**DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在浏览器和服务器之间进行实时通信,类似于Ajax(Asynchronous JavaScript and XML),但提供了更简单和直接的方法。DWR使得JavaScript可以直接...
4. AOP(Aspect Oriented Programming):面向切面编程,Spring提供了一种方便实现日志记录、性能统计、安全控制、事务管理等功能的方式,通过定义切面和通知来实现。 二、Spring启动配置加载 1. 配置源:Spring...
在大型软件开发过程中,手动编写大量的Java Bean类可能会消耗大量时间和精力,因此,Java Bean自动生成系统应运而生,旨在通过自动化的方式减少这种重复性工作,提高开发效率。 设计一个Java Bean自动生成系统需要...
Struts-Spring-Mybatis(SSH)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。SSH框架的每一个组件都有其特定的作用:Struts负责控制层,Spring处理业务逻辑和依赖注入,而Mybatis则专注于...
在Spring中,依赖注入通过以下几种方式实现: 1. **接口注入**:在这种模式下,被注入对象必须实现特定的接口,然后通过该接口进行注入。 2. **构造子注入**:依赖项通过构造函数参数传递,这种方式确保了依赖关系...
首先,"spring源码UML图"通常包括以下几种类型的UML图: 1. 类图(Class Diagram):类图展示了Spring框架中的类和接口,以及它们之间的关系,如继承、实现、关联和依赖。这有助于我们了解Spring的核心组件,如...
本文将深入探讨Spring中的几种常见数据库连接方式。 1. **JDBC模板(JdbcTemplate)** Spring的JdbcTemplate是基于JDBC的简单抽象层,它简化了编写SQL查询、处理结果集以及异常处理的过程。通过使用模板方法模式,...