`
Inmethetiger
  • 浏览: 111553 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring的实例化方式

阅读更多

首发地址: http://inmethetiger.iteye.com/blog/1685973

主要涉及构造方法注入,静态工厂,实例化工厂,set方法这几类方法实例化bean

1:使用空构造器进行定义,使用此种方式,class属性指定的类必须有空构造器

接口:

 

package com.yiyou.spring;

public interface IHello {
	public String sayHello();
}

 接口实现:

 

package com.yiyou.spring;


public class HelloImpl implements IHello {
	private String message;

       //空的构造方法
	public HelloImpl() {
		this.message = "Hello Spring Use Empty args Constructor";
	}

	@Override
	public String sayHello() {
		return message;
	}

}

 

配置

 

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">


	<!-- 使用空构造器进行定义,使用此种方式,class属性指定的类必须有空构造器 -->
	<bean name="bean1" class="com.yiyou.spring.HelloImpl"></bean>

</beans>

 

测试:

 

	
      @Test
	public void test1() {
		BeanFactory beanFactory = new ClassPathXmlApplicationContext(
				"beans.xml");
		IHello iHello = beanFactory.getBean("bean1", IHello.class);
		iHello.sayHello();
		log.info(iHello.sayHello());//Hello Spring Use Empty args Constructor

	}

 结果:Hello Spring Use Empty args Contructor

2:使用含有参数的构造器,使用此种方式,class属性指定的类必须含有该参数的构造器

接口一样。

接口实现:

 

package com.yiyou.spring;


public class HelloImpl implements IHello {
	private String message;

	public HelloImpl(String message) {
		this.message = message;
	}

	@Override
	public String sayHello() {
		return message;
	}

}
 

配置

 

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">

	<!-- 使用含有参数的构造器,使用此种方式,class属性指定的类必须含有该参数的构造器 -->
	<bean id="bean2" class="com.yiyou.spring.HelloImpl">
		<constructor-arg index="0" value="Hello Spring by Constructor"></constructor-arg>
	</bean>
</beans>

 测试

 

@Test
	public void test2() {
		BeanFactory beanFactory = new ClassPathXmlApplicationContext(
				"beans.xml");
		IHello iHello = beanFactory.getBean("bean2", IHello.class);
		iHello.sayHello();
		log.info(iHello.sayHello());//Hello Spring by Constructor

	}
 

结果:Hello Spring by Constructor表明使用带参数构造函数

 

 

3:使用静态工厂实例化bean,使用此种方法必须指定class属性,还要指定factory-method属性来指定实例化bean的方法,而且使用静态化方法也允许指定方法参数

1:接口。同上

2:同带参数的构造方法相同

3:需要一个静态工厂方法,返回一个接口

 

package com.yiyou.spring;

public class HelloStaticFactory {
	//工厂方法
	public static IHello newInstance(String message){
		return new HelloImpl(message);
	}
}

 4:配置

 

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">


	<!-- 使用静态工厂实例化bean,使用此种方法必须指定class属性,还要指定factory-method属性来指定实例化bean的方法,而且使用静态化
	方法也允许指定方法参数 -->
	<bean id="bean" class="com.yiyou.spring.HelloStaticFactory" factory-method="newInstance">
	  <constructor-arg index="0" value="静态方法初始化bean"></constructor-arg>
	</bean>

</beans>
 

测试:

 

@Test
	public void testStatic() {
		BeanFactory beanFactory = new ClassPathXmlApplicationContext(
				"beans.xml");
		IHello iHello = beanFactory.getBean("bean", IHello.class);
		iHello.sayHello();
		log.info(iHello.sayHello());// 静态方法初始化bean
	}
 

4:使用实例化工厂实例化bean,使用此种方法不能指定class属性,此刻必须使用factory-bean属性来指定工厂bean,同      样可以使用参数

 

一般都同上,只有以下不同

工厂方法:

 

package com.yiyou.spring;

public class HelloInstanceFactory {
	//实例化工厂方法
	public  IHello newInstance(String message){
		return new HelloImpl(message);
	}
}

 2:配置文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">


	<!-- 使用实例化工厂实例化bean,使用此种方法不能指定class属性,此刻必须使用factory-bean属性来指定工厂bean,同样可以使用参数 -->
	
	<!-- 实例化工厂bean初始化 -->
	<bean id="factoryBean" class="com.yiyou.spring.HelloInstanceFactory"></bean>
	<bean id="bean" factory-bean="factoryBean" factory-method="newInstance">
	  <constructor-arg index="0" value="实例化工厂方法初始化bean"></constructor-arg>
	</bean>

</beans>

 对静态工厂实例化和实例化工厂实例化来说,主要在配置文件中可以看出来。静态工厂中的配置文件只需要指定工厂类和工厂类的实例化方法。

而实例化工厂则需要实例化工厂类并且在实例化类中指定factory-bean

 

5:使用set方法注入。这个是最常见的一种,注入的对象必须存在set方法。

接口同上

实现

 

package com.yiyou.spring;

public class HelloImpl implements IHello {
	private String message;

	
	public HelloImpl() {
		super();
		// TODO Auto-generated constructor stub
	}

	public HelloImpl(String message) {
		super();
		this.message = message;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	@Override
	public String sayHello() {
		return message;
	}

}
 

其中可以去掉构造方法。

 

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd">


	<!-- 使用set注入,使用此种方式,注入对象必须存在set方法 -->
	<bean name="hello" class="com.yiyou.spring.HelloImpl">
	  <property name="message" value="这是使用set方法注入的"></property>
	</bean>

	
</beans>

 测试:

 

@Test
	public void test1() {
		BeanFactory beanFactory = new ClassPathXmlApplicationContext(
				"beans.xml");
		IHello iHello = beanFactory.getBean("hello", IHello.class);
		iHello.sayHello();
		log.info(iHello.sayHello());//这是使用set方法注入的

	}
 

 

 

 

 

------------------------------------------------防广告线-----------------------------------------------------------------

 

 

分享到:
评论

相关推荐

    Spring实例化Bean顺序

    在Spring框架中,Bean的实例化顺序是一个关键概念,它涉及到如何管理和协调多个Bean的创建与依赖关系。这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 ...

    Spring 实例化Bean的三种方式

    ### Spring 实例化Bean的三种方式详解 ...理解并掌握这些实例化方式,对于高效地使用Spring框架进行企业级应用开发至关重要。通过合理选择和运用这些实例化策略,可以显著提高代码的可读性、可维护性和扩展性。

    spring配置实例化后执行的初始化方法比对

    spring配置对象实例化后执行的方法,两种实现比对,通过InitializingBean接口,并实现arterPropertiesSet()方法;或者通过applicationContext.xml配置init-method属性

    Spring的三种实例化Bean的方式

    本文将详细介绍Spring中的三种主要的Bean实例化方式:XML配置、注解配置以及Java配置。 ### 1. XML配置 XML配置是Spring早期版本中最常见的Bean定义方式。在`spring_first`目录下的配置文件(如`beans.xml`)中,...

    spring实例化对象

    spring实例化对象

    Spring 延迟实例化

    ### Spring 延迟实例化的理解与应用 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,它提供了一种全面的方式来构建应用程序。Spring的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程...

    spring配置实例化后执行的销毁方法比对

    spring配置对象实例化后执行的方法,两种实现比对,通过DisposableBean接口,并实现destory()方法;或者通过applicationContext.xml配置destory-method属性

    spring 静态实例化

    ### Spring静态实例化详解 Spring框架作为Java领域中最为广泛使用的依赖注入(Dependency Injection, DI)容器之一,其强大的功能不仅体现在对复杂系统的管理上,还包括了许多高级特性,如静态实例化。本文将深入...

    JavaEE spring实例工厂的实例方式

    本篇将深入探讨Spring中的实例工厂(Instance Factory)的实例化方式,以及如何在实际应用中运用。 首先,我们需要理解什么是实例工厂。在Spring框架中,实例工厂是一种创建对象的方式,它允许我们自定义对象的创建...

    spring boot服务器dao层实例化.rar_dao实例化_idea 实例ID_spring boot_spring b

    本实例将探讨如何在Spring Boot中实例化DAO层,并使用IDEA(IntelliJ IDEA)进行开发。 首先,我们需要了解Spring Boot中的DAO层通常是如何构建的。在Spring框架中,DAO接口通常用于定义数据访问的方法,而其对应的...

    spring实例

    3. **Spring实例化和配置** - **XML配置**: 传统上,Spring应用通过XML配置文件来定义bean及其依赖。 - **Annotation配置**: 使用注解(如@Service、@Repository、@Controller等)可以直接在类上声明bean和依赖。 ...

    Spring项目bean实例化代码

    本篇文章将深入探讨Spring项目中Bean的实例化过程,包括三种主要的bean实例化方式:构造方法、静态工厂和实例工厂。 首先,让我们了解什么是Bean。在Spring中,Bean是应用程序中的业务对象,它们由Spring容器负责...

    spring国际化实例

    Spring框架是Java开发中的一个核心库,它提供了一个广泛的功能集,包括依赖注入、面向切面编程、数据访问、Web应用程序开发以及我们今天关注的主题——国际化(i18n)。国际化是一个过程,使得软件能够适应不同语言...

    mybatis整合spring 实例

    这个实例中的"mybatis整合spring实例(完整版)"文件可能包含了上述所有步骤的源代码,包括Spring的配置文件、MyBatis的配置文件、Mapper接口、XML文件以及相关的Java类。通过仔细阅读和理解这些代码,开发者可以...

    Spring实例化bean过程解析及完整代码示例

    Spring实例化bean过程解析及完整代码示例 在Spring框架中,bean的实例化是一个非常重要的过程。今天我们将详细介绍Spring实例化bean的过程,并提供一个完整的代码示例,以便更好地理解这个过程。 第一步:调用Bean...

    Spring Bean实例化实现过程解析

    Spring Bean 实例化实现过程解析 Spring Bean 实例化是 Spring 框架中一个非常重要的概念,它直接关系到 Bean 的生命周期和管理。在 Spring 框架中,Bean 的实例化是通过容器来管理的,容器会根据配置文件中的信息...

    详解Spring中bean实例化的三种方式

    在Spring框架中,Bean的实例化是其核心功能之一,用于管理...理解并掌握这些实例化方式有助于更好地利用Spring框架管理应用程序的组件。在实际项目中,根据具体情况选择合适的方法,以实现最佳的可维护性和可扩展性。

    实例化Spring bean的两种工厂方法

    实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置等。而工厂方法是其中一种自定义实例化过程的方法。 1. **实例工厂方法** 实例工厂方法是通过一个具体的工厂类实例来创建Spring Bean。在...

    Spring实例化bean的方式代码详解

    本篇文章将详细探讨Spring实例化bean的三种主要方式,并提供相关的代码示例。这些方式包括使用类构造器、静态工厂方法以及实例化工厂方法。 1. **使用类构造器实现实例化** 这是最基础的实例化方式,通过指定`...

    spring实例化javabean的三种方式分享

    这里我们将详细介绍Spring实例化Java Bean的三种常见方式。 ### 1. 直接配置XML bean 这是最基础的方式,直接在`bean.xml`配置文件中声明一个bean。例如: ```xml ``` 这里的`id`是bean的唯一标识,`class`属性...

Global site tag (gtag.js) - Google Analytics