获取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容器通过调用工厂类的方法来获取对象实例,并将其注入到依赖它的其他组件中。 二、配置实例工厂注入 1. 定义工厂类 首先,我们需要创建一个工厂类,这个类包含一个返回目标对象的静态或非静态方法。例如: `...
在Spring中配置MyBatis工厂类是MyBatis-Spring的关键步骤之一。这个工厂类,通常指的是`SqlSessionFactoryBean`,它是一个Spring的`Bean`,负责创建`SqlSessionFactory`实例。`SqlSessionFactory`是MyBatis的核心...
在上述配置中,`struts.objectFactory`设置为"spring",指示Struts2使用Spring作为对象工厂。`struts.spring.action扫描`定义了Action类的包扫描路径。`SpringPlugin`的配置指定了Spring应用上下文的位置。 在...
通过`ApplicationContext`,我们可以获取到所有已定义的bean,并进行初始化、装配和管理。源码中,`ClassPathXmlApplicationContext`和`FileSystemXmlApplicationContext`是最常见的实现类,它们分别基于类路径和...
4. 使用@Autowired注解或者通过Spring的bean工厂获取到Mapper接口的实例,进行数据库操作。 在这个"spring-mybatis-spring-1.0.0-RC2.zip"资源包中,包含了整合Spring和MyBatis所需的配置文件、Mapper接口和示例...
Spring Core是基础,提供了容器服务,如Bean工厂和ApplicationContext,负责对象的创建、配置和管理。Spring Beans构建于Core之上,主要用于实现依赖注入。Spring AOP提供了实现切面编程的工具。Spring JDBC和Spring...
`spring-context`是Spring框架的核心模块之一,它提供了上下文(ApplicationContext)的概念,使开发者可以获取到bean工厂,从而管理和控制应用的全部对象。`spring-context-support.jar`是Spring的一个扩展模块,它...
BeanFactory是管理对象(beans)的工厂,它负责创建、配置和管理这些对象。ApplicationContext则扩展了BeanFactory,提供了更多企业级服务,如消息处理和国际化。 2. **数据访问/集成**:这部分涵盖了对各种数据...
当Spring容器遇到一个被标记为FactoryBean的Bean定义时,它不会直接实例化这个Bean,而是调用`getObject()`方法来获取实际需要的对象。 在实际应用中,工厂Bean有多种用途。例如: 1. **复杂初始化逻辑**:如果一...
最后,在业务逻辑层,我们可以通过Spring的依赖注入获取到Mapper对象,然后调用其方法执行SQL: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public User getUser...
6. 编写Action:定义处理用户请求的Action类,通过Spring的依赖注入获取Service,调用Service完成业务逻辑。 五、实战解析 在"spring-mybatis-struts2-master"项目中,我们可以看到具体的Action类(如:UserAction....
这个容器就像一个大工厂,能够创建、配置、管理和查找对象。Spring Context是基于IoC(Inversion of Control,控制反转)原则设计的,它将对象的创建和装配权利从开发者手中接过,使得应用程序更易于测试和维护。 *...
- **1.4.5 自动装配协作对象**: Spring支持自动装配协作对象,减少显式配置的需求。 - **自动装配的限制**: 自动装配可能会导致依赖关系不明确的问题。 - **排除自动装配**: 可以通过设置`autowire-candidate`属性...
ResourceLoader接口使得获取资源变得容易,而ResourceLoaderAware接口则用于让对象能够感知到他们所使用的资源加载器。 验证、数据绑定和类型转换是Spring Framework提供的数据处理工具。Spring的验证模块允许...
- **实例化 MongoTemplate**:通过构造函数或工厂方法来创建 `MongoTemplate` 实例。 - **WriteResultCheckingPolicy**:控制写入结果的检查策略。 - **WriteConcern**:指定写入操作的确认级别。 - **...
Spring的核心容器包括Bean工厂和ApplicationContext,它是整个框架的基础。在这一版本中,对依赖注入(DI)和组件扫描的处理更加灵活和高效,使得配置过程更为简洁。同时,增强了Bean的生命周期管理,允许开发者更...
4. **Bean工厂与ApplicationContext**:Spring提供两种类型的容器,Bean工厂(BeanFactory)是最基本的,而ApplicationContext则增加了更多企业级服务,如消息源、国际化和事件发布。 5. **数据访问集成**:Spring...
- **配置SqlSessionFactory**:接着,创建SqlSessionFactoryBean,它是MyBatis的工厂类,用于生成SqlSession对象。 - **配置MyBatis的Mapper接口**:Spring通过MapperScannerConfigurer扫描包内所有继承自特定基类...
1. **Bean工厂与ApplicationContext**:Spring 1.1.4版本引入了ApplicationContext接口,它是BeanFactory的扩展,提供了更多企业级应用的功能,如国际化支持、事件传播和资源加载。 2. **数据访问集成**:此版本对...
- **下载Spring 3.1正式版本**:指导用户如何获取Spring 3.1的最新稳定版。 - **基于SVN库持续构建Spring源码**:介绍如何从Subversion仓库中检出源代码并进行编译。 #### 二、控制反转容器 **2.1 DI与Spring DI...