方法一:在初始化时保存ApplicationContext对象
说明:
这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContext.xml"); ac.getBean("beanId");
方法二:通过Spring提供的工具类获取ApplicationContext对象
说明:
这种方式适合于采用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);
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");
方法三:继承自抽象类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("/")); } }
相关推荐
当我们需要在非Spring管理的普通类中调用Spring管理的bean对象时,需要掌握特定的方法。这篇文档将详细介绍如何实现这一操作,并探讨相关的源码和技术工具。 首先,理解Spring的核心概念——依赖注入(Dependency ...
在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...
要从一个非Spring管理的类中获取Bean,我们需要先创建或获取`ApplicationContext`实例。有多种方式可以做到这一点,例如: 1. 通过`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`加载XML...
1. **@Component**:这是最基础的注解,用于标记一个普通的Java类为Spring Bean。如果你的类没有特定的角色,可以使用此注解。 2. **@Service**:通常用于标记业务逻辑层的类。它继承自@Component,添加了一些默认...
SpringBoot如何在普通类加载Spring容器 SpringBoot作为一个流行的Java框架,提供了很多便捷...通过封装一个工具类来获取Spring容器中的Bean,可以方便地在普通类中使用这些Bean,这种方式非常实用,可以提高开发效率。
- **Model 2 MVC**:在Web开发中,MVC(Model-View-Controller)模式的Model层常由普通的Java类(非Bean)组成。 综上所述,Java Bean是Java开发中的重要组成部分,尤其在早期的Java EE应用中占据核心地位。虽然...
这些注解可以用于标记任何普通的Java类,声明它们为Spring Bean。`@Component`用于通用组件,`@Service`用于业务层,`@Repository`用于数据访问层。 2. **`@Autowired`注入**:当Bean被自动扫描后,Spring可以使用`...
普通的POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了,每个标注了@Bean的类方法都相当于提供一个Bean的定义信息。 基于Java类的配置方法和基于XML或基于注解的配置方式相比,前者通过...
- **POJO支持**:Spring允许开发者使用普通的Java对象(POJO)来构建企业级应用,这意味着开发者无需依赖EJB容器产品(如应用服务器),而可以选择更简单、更灵活的servlet容器(如Tomcat)或其他商业产品。...
2. `@Component`:这个注解用于标记普通的Java类,使其成为Spring管理的bean。通常,我们还会使用其子注解如`@Service`、`@Repository`和`@Controller`来细分不同类型的bean。 3. `@Bean`:在方法上使用此注解,表示...
3. **@Component** - 这是Spring中的一个注解,用于标记一个普通的Java类作为Spring的bean。配合@ComponentScan使用,可以自动扫描并注册这些bean。 4. **@Autowired** - 自动装配是Spring提供的一种注入依赖的方式...
Spring的JMS模块提供了一种声明式的方式来配置ConnectionFactory和MessageListener,使得消息驱动的bean可以轻松地与消息队列交互。 1. Spring JMS配置:这可能包括在Spring XML配置文件中定义JMS相关bean,如...
Spring Bean 可以是任何 Java 对象,如 POJO(普通 Java 对象)、JavaBean(遵循 JavaBean 规范的类)、业务对象等。 **定义 Spring Bean 的方式包括:** - **XML 配置文件:** 通过在 Spring 的 XML 配置文件中...
使用 SpringUtil 工具类可以让我们在普通类中轻松地获取 applicationContext 对象,从而获取所需的 Bean 对象。这样,我们就可以在不需要将类注入到 Spring 容器中的情况下使用 Spring 提供的对象。 结语 在本文中...
如果没有指定 id 和 name 属性,Spring 将自动将类的全限定名作为 Bean 的名称。如果存在多个匿名 Bean,即没有指定 id 和 name 的 `<bean/>`,则可以使用全限定名加上数字后缀来获取 Bean。 三、依赖注入 依赖...
除了普通的Bean,Spring还支持抽象Bean,也就是`abstract="true"`的Bean。这些Bean不会被实例化,仅用于其他Bean继承配置。例如: ```xml <bean id="address4" class="com.sunny.beans.autowire.Address" p:city="...
6. **项目结构**:通常,一个基于Spring+Mybatis的项目会包含src/main/java目录下存放Java源码,src/main/resources下存放配置文件如Spring的bean配置、Mybatis的Mapper XML文件,以及SQL脚本。pom.xml是Maven的项目...
《Java EE企业级应用开发教程》第二版,结合Spring、Spring MVC和MyBatis三大框架,为读者提供了全面深入的Java后端开发学习路径。这本书的源码资源旨在帮助开发者通过实践来理解并掌握企业级应用开发的核心技术。 ...
控制器可以是普通的Java类,通过注解(如@Controller、@RequestMapping)来标识其为Spring MVC的控制器。 ### 六、视图(View) 视图是展示数据给用户的部分,通常由JSP或Thymeleaf等模板引擎生成。Spring MVC通过...
Spring容器会根据`Conf`类中的`@Bean`注解来创建bean,然后我们可以通过bean的类型从容器中获取对象并调用其方法。 值得注意的是,`AnnotationConfigApplicationContext`可以接受多个类作为输入,这些类可以是`@...