`
schy_hqh
  • 浏览: 555781 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spring-获取工厂对象

 
阅读更多

获取Spring容器的工厂

 

方式一:

根据配置文件创建工厂并管理对象

这种方式与容器启动时创建的工厂是2个概念,在进行事务控制等方面会有问题!

仅测试用!

package com.hqh.student.ws;

import java.util.List;

import javax.jws.WebService;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hqh.student.model.Reward;
import com.hqh.student.model.Student;
import com.hqh.student.service.StudentService;


@WebService(endpointInterface="com.hqh.student.ws.IStudentWSService",
			serviceName="StudentWSService",
			portName="studentServicePort",
			targetNamespace="http://ws.student.hqh.com",
			wsdlLocation="META-INF/wsdl/student.wsdl")
public class StudentWSServiceImpl implements IStudentWSService{
	private static final BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
	public StudentWSServiceImpl() {
		if(studentService==null) {
			studentService = factory.getBean(StudentService.class);
		}
	}
	
	private StudentService studentService;
	
	@Override
	public Student getStudent(String number) {
		return studentService.getStudent(number);
	}

	@Override
	public List<Student> list() {
		return studentService.list();
	}

	@Override
	public List<Reward> listReward(String number, String year) {
		return studentService.listReward(number, year);
	}

}

 

 

 

方式二:

通过Servlet来获取

1、 创建一个Servlet用于在初始化servlet时,通过servlet的context获取到spring容器的工厂对象

package com.hqh.student.context;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

/**
 * 根据Servlet的context对象获取spring工厂
 * 再将工厂设置到自己的工具类中
 * @author lenovo
 *
 */
public class InitContextServlet extends HttpServlet {
	@Override
	public void init() throws ServletException {
		WebApplicationContext ctx = 
				WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
		WebUtil.setWebAppContext(ctx);
		super.init();
	}

}

 

2、 获取到工厂对象后,将对象设置到自己的工具类中,以后直接从工具类中获取bean

package com.hqh.student.context;

import org.springframework.web.context.WebApplicationContext;

public class WebUtil {
	private static WebApplicationContext ctx;
	
	private WebUtil() {
		
	}
	
	public static void setWebAppContext(WebApplicationContext ctx) {
		System.out.println("------------------->>>>>>>>>>>WebUtil.setWebAppContext()");
		WebUtil.ctx = ctx;
	}
	
	public static WebApplicationContext getWebAppContext() {
		return ctx;
	}
	
	public static Object getBean(Class clazz) {
		return ctx.getBean(clazz);
	}
}

 

3、 web.xml配置servlet

<!-- 初始化Servlet,用于设置spring工厂 -->
<servlet>
	<servlet-name>InitContextServlet</servlet-name>
	<servlet-class>com.hqh.student.context.InitContextServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>

 4、从工具类中获bean【定时任务,webservice等在没有通过注入方式初始化对象时,非常有用!】

private StudentService studentService;
	
	
@Override
public Student getStudent(String number) {
	studentService = (StudentService) WebUtil.getBean(StudentService.class);
	return studentService.getStudent(number);
}

 

 

方式三:

通过BeanFactoryAware接口来获取,该方式较第二种方式更简单些!

 

package com.hqh.student.context;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Component;

/**
 * 一定要加注解,声明该对象由spring管理
 * 否则,实现了BeanFactoryAware也不会将工厂注入
 * @author lenovo
 *
 */
@Component
public class BeanFactoryUtil implements BeanFactoryAware {

	private static BeanFactory factory;
	
	@Override
	public void setBeanFactory(BeanFactory factory) throws BeansException {
		System.out.println("------------------->>>>>>>>>>>BeanFactoryUtil.setBeanFactory()");
		this.factory = factory;
	}
	
	public static Object getBean(Class clazz) {
		return factory.getBean(clazz);
	}

}

 

 获取bean

private StudentService studentService;


@Override
public Student getStudent(String number) {
//	studentService = (StudentService) WebUtil.getBean(StudentService.class);
	studentService = (StudentService) BeanFactoryUtil.getBean(StudentService.class);
	return studentService.getStudent(number);
}

 

 

分享到:
评论

相关推荐

    spring-实例工厂注入

    Spring容器通过调用工厂类的方法来获取对象实例,并将其注入到依赖它的其他组件中。 二、配置实例工厂注入 1. 定义工厂类 首先,我们需要创建一个工厂类,这个类包含一个返回目标对象的静态或非静态方法。例如: `...

    MyBatis整合Spring中间件jar包 mybatis-spring-1.3.0.jar

    在Spring中配置MyBatis工厂类是MyBatis-Spring的关键步骤之一。这个工厂类,通常指的是`SqlSessionFactoryBean`,它是一个Spring的`Bean`,负责创建`SqlSessionFactory`实例。`SqlSessionFactory`是MyBatis的核心...

    SSH\\others\\struts2-spring-plugin-2.2.1.jar

    在上述配置中,`struts.objectFactory`设置为"spring",指示Struts2使用Spring作为对象工厂。`struts.spring.action扫描`定义了Action类的包扫描路径。`SpringPlugin`的配置指定了Spring应用上下文的位置。 在...

    spring-context源码

    通过`ApplicationContext`,我们可以获取到所有已定义的bean,并进行初始化、装配和管理。源码中,`ClassPathXmlApplicationContext`和`FileSystemXmlApplicationContext`是最常见的实现类,它们分别基于类路径和...

    spring-mybatis-spring-1.0.0-RC2.zip

    4. 使用@Autowired注解或者通过Spring的bean工厂获取到Mapper接口的实例,进行数据库操作。 在这个"spring-mybatis-spring-1.0.0-RC2.zip"资源包中,包含了整合Spring和MyBatis所需的配置文件、Mapper接口和示例...

    spring-framework-5.0.2.RELEASE-中文注释版-终极完美版.rar

    Spring Core是基础,提供了容器服务,如Bean工厂和ApplicationContext,负责对象的创建、配置和管理。Spring Beans构建于Core之上,主要用于实现依赖注入。Spring AOP提供了实现切面编程的工具。Spring JDBC和Spring...

    spring-context-support.jar,quartz-all-1.6.0.jar

    `spring-context`是Spring框架的核心模块之一,它提供了上下文(ApplicationContext)的概念,使开发者可以获取到bean工厂,从而管理和控制应用的全部对象。`spring-context-support.jar`是Spring的一个扩展模块,它...

    spring-framework-5.2.3.RELEASE.rar

    BeanFactory是管理对象(beans)的工厂,它负责创建、配置和管理这些对象。ApplicationContext则扩展了BeanFactory,提供了更多企业级服务,如消息处理和国际化。 2. **数据访问/集成**:这部分涵盖了对各种数据...

    spring学习----工厂Bean

    当Spring容器遇到一个被标记为FactoryBean的Bean定义时,它不会直接实例化这个Bean,而是调用`getObject()`方法来获取实际需要的对象。 在实际应用中,工厂Bean有多种用途。例如: 1. **复杂初始化逻辑**:如果一...

    spring-mybatis-spring-3.0.0.zip

    最后,在业务逻辑层,我们可以通过Spring的依赖注入获取到Mapper对象,然后调用其方法执行SQL: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public User getUser...

    spring-mybatis-struts2-master ——demo

    6. 编写Action:定义处理用户请求的Action类,通过Spring的依赖注入获取Service,调用Service完成业务逻辑。 五、实战解析 在"spring-mybatis-struts2-master"项目中,我们可以看到具体的Action类(如:UserAction....

    spring-context-3.0.0.RELEASE.jar.zip

    这个容器就像一个大工厂,能够创建、配置、管理和查找对象。Spring Context是基于IoC(Inversion of Control,控制反转)原则设计的,它将对象的创建和装配权利从开发者手中接过,使得应用程序更易于测试和维护。 *...

    spring-core.pdf

    - **1.4.5 自动装配协作对象**: Spring支持自动装配协作对象,减少显式配置的需求。 - **自动装配的限制**: 自动装配可能会导致依赖关系不明确的问题。 - **排除自动装配**: 可以通过设置`autowire-candidate`属性...

    spring-framework-4-reference.pdf

    ResourceLoader接口使得获取资源变得容易,而ResourceLoaderAware接口则用于让对象能够感知到他们所使用的资源加载器。 验证、数据绑定和类型转换是Spring Framework提供的数据处理工具。Spring的验证模块允许...

    spring-data-mongodb-reference 1.5.4

    - **实例化 MongoTemplate**:通过构造函数或工厂方法来创建 `MongoTemplate` 实例。 - **WriteResultCheckingPolicy**:控制写入结果的检查策略。 - **WriteConcern**:指定写入操作的确认级别。 - **...

    spring-framework-5.1.7.RELEASE-dist.zip

    Spring的核心容器包括Bean工厂和ApplicationContext,它是整个框架的基础。在这一版本中,对依赖注入(DI)和组件扫描的处理更加灵活和高效,使得配置过程更为简洁。同时,增强了Bean的生命周期管理,允许开发者更...

    spring官方完整jar包-4.1.6版

    4. **Bean工厂与ApplicationContext**:Spring提供两种类型的容器,Bean工厂(BeanFactory)是最基本的,而ApplicationContext则增加了更多企业级服务,如消息源、国际化和事件发布。 5. **数据访问集成**:Spring...

    spring-mybatis-spring-1.2.2_src.zip

    - **配置SqlSessionFactory**:接着,创建SqlSessionFactoryBean,它是MyBatis的工厂类,用于生成SqlSession对象。 - **配置MyBatis的Mapper接口**:Spring通过MapperScannerConfigurer扫描包内所有继承自特定基类...

    spring-framework-1.1.4 lib 包

    1. **Bean工厂与ApplicationContext**:Spring 1.1.4版本引入了ApplicationContext接口,它是BeanFactory的扩展,提供了更多企业级应用的功能,如国际化支持、事件传播和资源加载。 2. **数据访问集成**:此版本对...

    spring-3.1.0中文版api帮助文档

    - **下载Spring 3.1正式版本**:指导用户如何获取Spring 3.1的最新稳定版。 - **基于SVN库持续构建Spring源码**:介绍如何从Subversion仓库中检出源代码并进行编译。 #### 二、控制反转容器 **2.1 DI与Spring DI...

Global site tag (gtag.js) - Google Analytics