- 浏览: 50602 次
- 性别:
- 来自: 台源
最新评论
获得spring里注册Bean的四种方法,特别是第三种方法,简单:
一:方法一(多在struts框架中)继承BaseDispatchAction
二:方法二实现BeanFactoryAware
一定要在spring.xml中加上:
当对serviceLocator实例时就自动设置BeanFactory,以便后来可直接用 beanFactory
action调用:
三:方法三实现ApplicationContextAware,一定要在spring.xml中加上:
当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext
action调用:
四.通过servlet 或listener设置spring的 ApplicationContext,以便后来引用.
注意分别extends ContextLoaderListener和ContextLoaderServlet .然后就可用SpringContext 来getBean.
覆盖原来在web.xml中配置的listener或servlet.
一:方法一(多在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 ServiceLocator implements BeanFactoryAware { private static BeanFactory beanFactory = null; private static ServiceLocator servlocator = null; public void setBeanFactory(BeanFactory factory) throws BeansException { this.beanFactory = factory; } public BeanFactory getBeanFactory() { return beanFactory; } public static ServiceLocator getInstance() { if (servlocator == null) servlocator = (ServiceLocator) beanFactory.getBean("serviceLocator"); return servlocator; } /** * 根据提供的bean名称得到相应的服务类 * @param servName bean名称 */ public static Object getService(String servName) { return beanFactory.getBean(servName); } /** * 根据提供的bean名称得到对应于指定类型的服务类 * @param servName bean名称 * @param clazz 返回的bean类型,若类型不匹配,将抛出异常 */ public static Object getService(String servName, Class clazz) { return beanFactory.getBean(servName, clazz); } }
action调用:
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())); } }
发表评论
-
WSDL中min0ccurs和nillable的区别
2011-08-15 16:59 8221minOccurs="0" 在null的时 ... -
[转]利用Spring的AOP机制配置管理EHCache
2010-05-27 09:17 1434如果我们的项目中采用的是Spring+hibern ... -
[转]Hibernate的proxool连接池参数
2010-05-20 18:05 1219Example configuration: <p ... -
[转]Spring中ApplicationContext的获取方式
2010-05-20 08:29 976Spring中ApplicationContext加载机制。 ... -
[转]Struts 2.1.x + Spring 2.5.x + Hibernate 3.3.x整合需要的JAR包
2010-05-19 08:55 1292下面这个表相信对很多人都有用: jar包名称 ... -
Spring整合Hibernate
2010-05-18 22:39 0Hibernate3.3 + Spring2.5整合 1.包 ... -
[转]Javascript解析XML文档
2010-05-11 15:41 773例如有如下XML文件: <?xml version ... -
[转]Criteria和DetachedCriteria的分别
2010-05-07 12:42 810使用 Spring 和 Hibernate 进行开发,有 ... -
Java读取properties文件的思考
2010-04-21 15:33 1160此文为转载,原文地址:http://lavasoft.blog ... -
超简单的QuartZ上手入门教程
2010-04-19 16:57 2321随便写个Job类,实现quartz的job package ... -
MAS系统的ApiClient源码
2010-03-23 10:12 3857此文为转载,权作参考! package com.jasson ... -
LRC格式转换
2008-09-12 23:36 1368import java.io.BufferedReader; ...
相关推荐
另一种获取Bean的方法是让类实现`BeanFactoryAware`接口。Spring容器会自动调用该接口的`setBeanFactory(BeanFactory beanFactory)`方法,将整个`BeanFactory`实例注入到实现了该接口的类中。这样就可以通过`...
获取Bean主要有以下几种方式: 1. **通过Bean的ID**:使用`ApplicationContext`的`getBean()`方法,传入Bean的ID来获取实例。 2. **自动装配(Autowired)**:使用`@Autowired`注解,Spring会自动匹配类型匹配的...
本文主要探讨了Java获取Bean的多种方式,尤其在Spring Boot和IOC(控制反转)环境下。这些方式可以帮助开发者便捷地从Bean容器中检索和使用所需的Bean。 1. **初始化时保存ApplicationContext对象** 当应用启动时...
当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...
以下将详细介绍Spring在代码中获取bean的几种主要方法: 1. **`ApplicationContext` 接口** `ApplicationContext` 是Spring中最常用的接口之一,它提供了获取Bean的多种方法。例如,`getBean(String beanName)` ...
本篇将详细介绍Spring Boot中获取Bean的几种常见方式。 首先,让我们理解什么是Spring Bean。在Spring框架中,Bean是一个由Spring容器管理的对象,通常代表应用中的业务组件或服务。Spring会负责Bean的创建、初始化...
"Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序中最流行的框架之一,它提供了许多功能强大且灵活的功能之一就是Bean管理机制。Bean是Spring框架的核心组件,用于管理应用程序中的业务逻辑。在...
获取Bean主要有以下几种方式: 1. **通过名称获取Bean** 使用`ApplicationContext`的`getBean(String name)`方法可以直接根据Bean的定义名称获取到对应的实例。例如: ```java ApplicationContext context = new...
在非Spring管理的类中,如果你想使用Spring容器中的bean,有以下几种方式: - 实现ApplicationContextAware接口,Spring会在初始化时自动注入ApplicationContext。 - 使用`@Resource`注解,与`@Autowired`类似,...
4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...
Spring提供了多种方式来获取Bean,下面将详细介绍几种常用的方法。 1. **基于XML的配置** 在传统的Spring应用中,Bean定义通常存储在XML文件中。我们可以通过`ApplicationContext`接口的`getBean`方法来获取Bean。...
本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...
在 Spring 框架中,有多种方式可以获取 Bean 对象。下面我们将介绍其中的一些常用姿势实例。 1. 使用 ApplicationContext 获取所有的 Bean ApplicationContext 提供了获取所有已经成功注入 Spring IoC 容器的 Bean...
可以通过多种方式来初始化`ApplicationContext`,其中最常见的有以下几种: 1. **XML配置文件**:使用XML配置文件来定义Spring容器中Bean的配置信息。 2. **注解驱动**:使用注解如`@ComponentScan`、`@...
Bean的初始化阶段可以通过以下几种方式: 1. 实现InitializingBean接口,重写afterPropertiesSet()方法。 2. 使用@PostConstruct注解标记初始化方法。 3. 在XML配置文件中使用`init-method`属性指定初始化方法。 ...
在示例中,`User`类被配置为一个Bean,通过`ClassPathXmlApplicationContext`加载配置并获取Bean实例。 2. 静态工厂创建: 当需要通过类的静态方法创建Bean实例时,可以使用这种方式。首先,我们需要一个带有静态...
Spring 获取 WebApplicationContext、ApplicationContext 几种方法详解 在 Spring 框架中,获取 WebApplicationContext 和 ApplicationContext 对象是非常重要的,因为它们提供了访问 Spring 容器中的 Bean 对象的...
在 Spring 框架中,Bean 的作用域可以分为以下几种: 1. singleton:单实例(默认),ioc 容器启动时就会创建对象放到ioc 容器中,以后每次获取都是直接从ioc 容器中获取 2. prototype:多实例(原型),ioc 容器...
本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...
本文将详细讲解在Spring Controller中获取请求参数的六种常见方法。 1. **直接作为方法参数** 当请求是GET类型且`Content-Type`为`application/x-www-form-urlencoded`时,可以直接在Controller方法的参数列表中...