一、基于XML配置的Spring对Bean的实例化:有三种方式:类的构造器,静态工厂,实例工厂
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- Spring三种实例化Bean之一:使用类构造器实例化 -->
<bean id="personService"
class="base.service.imple.PersonServiceImple">
</bean>
<!-- Spring三种实例化Bean之二:使用静态工厂方法实例化 -->
<bean id="personService2"
class="base.factory.StaticBuildBeanFactroy"
factory-method="createPersonService">
</bean>
<!-- Spring三种实例化Bean之三:使用实例工厂方法实例化 -->
<bean id="buildBeanFactory" class="base.factory.BuildBeanFactory"></bean>
<bean id="personService3" factory-bean="buildBeanFactory"
factory-method="createPersonService">
</bean>
</beans>
Bean的接口:
package base.service;
public interface PersonService {
public void save();
}
Bean的实现:
public class PersonServiceImple implements PersonService {
// 一个普通的方法,可以在beans.xml设置成它为在构造方法执行完后就执行的方法
public void init() {
System.out.println("初始化方法");
}
// 一个普通的方法,可以在beans.xml设置成它为在Spring容器关闭后执行的方法
// (若该Bean的scope为prototype时则不会执行)
public void destroy() {
System.out.println("销毁方法");
}
// 构造方法(用来显示实例始化了)
public PersonServiceImple() {
System.out.println("实例化了...");
}
public void save() {
System.out.println("PersonServiceImple的save()方法");
}
}
两个Bean工厂如下:
/**
* 实例工厂构造Bean
*
* @author 张明学
*/
public class BuildBeanFactory {
public PersonService createPersonService() {
return new PersonServiceImple();
}
}
/**
* 静态工厂构造Bean
*
* @author 张明学
*/
public class StaticBuildBeanFactroy {
public static PersonService createPersonService() {
return new PersonServiceImple();
}
}
测试:
public static void main(String[] args) {
// Spring 容器初始化
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 多个Spring配置文件可以作为一个数组
// context = new ClassPathXmlApplicationContext(new String[] {
// "beans.xml" });
PersonService personService = null;
//personService = (PersonService) context.getBean("personService");
//personService = (PersonService) context.getBean("personService2");
personService = (PersonService) context.getBean("personService3");
personService.save();
}
Spring2.5为Bean提供了几中模式:singleton(默认配置),prototype,request,session,global session
还可以设置Bean实例的时机,可以在容器启动时构造实例(默认配置)也可在第一次使用时构造实例。
还有一些其配置如下:
<!--
scope默认为:singleton 单例模式
设置为:prototype 每次得到一个新的实例对象
还有:request,session,global session
lazy-init: true 表示:该Bean延迟初始化,不是Spring容器初始化时就初始化
false(默认值) 表示:不以该Bean延迟初始化,即Spring容器初始化时就初始化
在beans设置default-lazy-init可以为该beans里所有的bean设置一个默认的lazy-init的值
设置了scope为“prototype”时:lazy-init无论是true还是false都是延迟初始化
init-method 设置为:该bean中的某个方法在构造方法执行完就执行的方法
destroy-method 设置为:在Spring空器关闭之后执行的方法(若将该bean的scope设置为prototype则不会执行)
-->
<bean id="personService4"
class="base.service.imple.PersonServiceImple" scope="prototype"
lazy-init="true" init-method="init" destroy-method="destroy">
</bean>
测试如下:
public static void main(String[] args) {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService p1 = (PersonService) ctx.getBean("personService4");
PersonService p2 = (PersonService) ctx.getBean("personService4");
/**
* 在默认情况下:scope为singleton单例模式 prototype每次会得到一个新的实例
*/
System.out.println(p1 == p2);
// 关闭Spring的容器
ctx.close();
}
分享到:
相关推荐
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
在Spring 3.0及以上版本,还可以通过注解配置实现Bean实例化,如使用`@Component`、`@Service`、`@Repository`和`@Controller`注解标记类为Bean,以及`@Autowired`进行依赖注入。此外,`@Bean`注解可以用于Java配置...
本文将详细介绍Spring中的三种主要的Bean实例化方式:XML配置、注解配置以及Java配置。 ### 1. XML配置 XML配置是Spring早期版本中最常见的Bean定义方式。在`spring_first`目录下的配置文件(如`beans.xml`)中,...
**Spring基础和入门** Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用。它提供了一个全面的编程和配置模型,用于简化Java应用程序的开发,特别是Web应用程序。Spring的核心特性包括依赖注入...
同时,对源码进行调试也是一个有效的排查手段,可以追踪到Bean实例化的具体位置,找出问题的根源。 综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂...
这是Spring的配置文件,定义了bean的实例化、装配和初始化。在`ApplicationContext-1.xml`中,我们可以声明bean的定义,包括bean的类名、属性、依赖关系等。Spring框架通过读取这个文件来创建和管理对象。XML配置...
在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...
Spring IoC容器根据XML配置文件中的定义来实例化对象并管理它们。 - **AOP(面向切面编程,Aspect Oriented Programming)**:Spring提供了对AOP的支持,可以方便地实现日志记录、事务管理等功能,通过定义切面来...
3. **配置 Spring**:创建一个 `applicationContext.xml` 配置文件,声明 Bean 及其依赖。 4. **注入 Bean**:在需要使用 Bean 的地方,通过 `@Autowired` 注解注入 Bean。 5. **编写测试**:使用 `...
- **Spring配置**:学习XML配置和基于注解的配置,以及如何创建和管理bean。 - **AOP基础**:了解切面、通知、目标对象等概念,以及如何创建和使用切面。 - **Spring MVC**:学习控制器、模型、视图和处理器映射的...
在本教程中,我们将深入探讨如何在Java Web开发中整合Spring、Spring MVC和MyBatis框架,特别是关注基于XML配置的Mapper接口方式。这三种技术的集成为开发高效、可维护的Web应用提供了强大支持。 首先,Spring是...
在XML配置中,Spring4的配置文件如`applicationContext.xml`用于定义Bean的实例化、装配、生命周期管理等。比如,可以定义Service层和DAO层的Bean,并设置它们之间的依赖关系。 **Hibernate4** 是一个对象关系映射...
本实例将深入探讨 Spring 的 XML 配置机制,了解如何通过 XML 文件来管理和组织应用的组件。 XML 配置是 Spring 的早期核心特性,它允许开发者声明式地定义 Bean 的定义、依赖关系以及其它服务。Bean 是 Spring ...
在Spring框架中,XML配置文件是核心组成部分,它定义了bean的实例化、依赖注入以及其他的框架设置。本文将深入探讨如何模拟Spring的XML配置文件注入,并通过SAXBuilder解析XML文件来实现这一过程。 首先,理解XML...
基于Java类的配置方法和基于XML或基于注解的配置方式相比,前者通过代码的方式更加灵活地实现Bean的实例化及Bean之间的装配,但后面两者都是通过配置声明的方式,在灵活性上要稍逊一些,但是配置上要更简单一些。
无论是通过XML配置还是注解方式,Spring都能灵活地实例化和管理bean,使得开发者可以专注于业务逻辑,而不是对象的创建和管理。在实际项目中,理解和掌握Spring IOC的这些概念和用法是至关重要的。
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
2. 实例化:在这个阶段,Bean已经实例化,但是还没有进行任何其他操作。 3. 设置BeanName:在这个阶段,Bean已经实例化,并且已经设置了名称。 4. 设置BeanFactory:在这个阶段,Bean已经实例化,并且已经设置了...
在Spring框架中,bean的实例化是其核心功能之一,它允许我们管理应用程序中的对象生命周期。本篇将详细探讨两种工厂方法——实例工厂方法和静态...在实际项目中,应根据实际情况权衡利弊,选择最适合的Bean实例化策略。