`
wuhaidong
  • 浏览: 357720 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Bean实例的创建方式及对应配置

阅读更多

1.调用构造器创建bean实例

 

package org.cric.util;

public interface Axe {
	//Axe 接口有个砍得方法
	public String chop();
}
 
package org.cric.util;

public class SteelAxe implements Axe {
	//默认构造器
	public SteelAxe(){
		System.out.println("Spring实例化依赖Bean:SteelAxe实例……");
	}
	//实现Axe接口的chop方法
	public String chop() {
		
		return "钢斧砍材真快";
	}
}
 
package org.cric.util;

public interface Person {
	//Person 接口一个使用斧子的方法
	public void userAxe();
}
 
package org.cric.util;

public class Chinese implements Person {
	
	private Axe axe;
	//默认的构造器
	public Chinese(){
		System.out.println("Spring 实例化主调Bean:Chinese 实例……");
	}
	//设值注入所需的setter方法
	public void setAxe(Axe axe) {
		System.out.println("Spring 执行依赖关系注入");
		this.axe = axe;
	}
	//实现Person接口的useAxe()方法
	public void userAxe() {
		System.out.println(axe.chop());
	}

}


<?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-2.5.xsd ">
	<bean id="axe" class="org.cric.util.SteelAxe"/>
	<bean id="person" class="org.cric.util.Chinese">
		<property name="axe" ref="axe"/>
	</bean>
</beans>
 
package org.cric.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTest {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		System.out.println("程序已经实例化Spring 容器");
		Chinese chinese = (Chinese)context.getBean("person");
		System.out.println("程序已经完成了chinese bean 的实例化");
		chinese.userAxe();
	}

}
 

2.使用静态工厂方法创建bean

package org.cric.staticfactory;

public interface Bing {
	//接口定义testBeing()方法
	public void testBing();
}
 
package org.cric.staticfactory;

public class Cat implements Bing {
	
	private String msg;
	//依赖注入时必需的setter方法
	public void setMsg(String msg) {
		this.msg = msg;
	}
	//实现接口必须实现的testBing方法
	public void testBing() {
		System.out.println(msg + "猫喜欢吃老鼠");
	}

}
 

package org.cric.staticfactory;

public class Dog implements Bing {
	
	private String msg;
	//依赖注入式必需的setter方法
	public void setMsg(String msg) {
		this.msg = msg;
	}
	//实现接口必须实现的testBing方法
	public void testBing() {
		System.out.println(msg + "狗爱啃骨头");
	}

}
 
package org.cric.staticfactory;

public class BingFactory {
	
	public static Bing getBing(String arg){
		if(arg.equalsIgnoreCase("dog")){
			return new Dog();
		}else{
			return new Cat();
		}
	}
}
 

<?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-2.5.xsd ">
	<!--
	<bean id="axe" class="org.cric.util.SteelAxe"/>
	<bean id="person" class="org.cric.util.Chinese">
		<property name="axe" ref="axe"/>
	</bean>
	-->
	<!-- 配置BingFactory的getBing()方法产生dog bean -->
	<bean id="dog" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
		<!-- 配置静态工厂方法的参数 -->
		<constructor-arg value="dog"/>
		<!-- 配置普通依赖注入属性 -->
		<property name="msg" value="我是狗!"/>
	</bean>
	<!-- 配置BingFactory的getBing()方法产生cat bean -->
	<bean id="cat" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
		<!-- 配置静态工厂方法的参数 -->
		<constructor-arg value="cat"/>
		<!-- 普通属性依赖注入属性 -->
		<property name="msg" value="我是猫!"/>
	</bean>
</beans>
 

package org.cric.staticfactory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTest {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bing b1 = (Bing)context.getBean("dog");
		b1.testBing();
		Bing b2 = (Bing)context.getBean("cat");
		b2.testBing();
	}

}
 
3.使用实例工厂方法创建bean

package org.cric.other;

public interface Person {
	//定义一个打招呼的方法
	public String sayHello(String name);
	//定义一个告别的方法
	public String sayGoodBye(String name);
}
 
package org.cric.other;

public class Chinese implements Person {

	public String sayGoodBye(String name) {
		
		return name + ",下次再见";
	}
	public String sayHello(String name) {
		
		return name + ",你好";
	}

}
 

package org.cric.other;

public class American implements Person {

	public String sayGoodBye(String name) {

		return name + ",GoodBye";
	}
	public String sayHello(String name) {

		return name + ",Hello";
	}
}
 

package org.cric.other;

public class PersonFactory {
	
	public Person getPerson(String arg){
		if(arg.equalsIgnoreCase("chinese")){
			return new Chinese();
		}else{
			return new American();
		}
	}
}
 
<?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-2.5.xsd ">
	<!--
	<bean id="axe" class="org.cric.util.SteelAxe"/>
	<bean id="person" class="org.cric.util.Chinese">
		<property name="axe" ref="axe"/>
	</bean>
	-->
	<!-- 配置BingFactory的getBing()方法产生dog bean -->
	<bean id="dog" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
		<!-- 配置静态工厂方法的参数 -->
		<constructor-arg value="dog"/>
		<!-- 配置普通依赖注入属性 -->
		<property name="msg" value="我是狗!"/>
	</bean>
	<!-- 配置BingFactory的getBing()方法产生cat bean -->
	<bean id="cat" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
		<!-- 配置静态工厂方法的参数 -->
		<constructor-arg value="cat"/>
		<!-- 普通属性依赖注入属性 -->
		<property name="msg" value="我是猫!"/>
	</bean>
	<!-- 配置工厂Bean,该Bean负责产生其他Bean实例 -->
	<bean id="personFactory" class="org.cric.other.PersonFactory"/>
	<bean id="chinese" factory-bean="personFactory" factory-method="getPerson">
		<!-- 调用工厂方法时,传入的参数通过 constructor-arg 指定-->
		<constructor-arg value="chinese"/>
	</bean>
	<bean id="american" factory-bean="personFactory" factory-method="getPerson">
		<constructor-arg value="american"/>
	</bean>
</beans>
 

分享到:
评论

相关推荐

    SSH笔记-静态/实例工厂方法配置bean

    在上述代码中,`staticFactoryBean`和`instanceFactoryBean`方法分别对应静态工厂和实例工厂方法,`@Bean`注解表示该方法将返回一个Bean实例。 总结来说,SSH笔记中提到的静态和实例工厂方法是Spring框架中创建Bean...

    Spring的三种实例化Bean的方式

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

    SpingIOC注入实例化bean

    - **原型(Prototype)**:每次请求都会创建一个新的bean实例。 - **请求(Request)**:在Web应用中,每个HTTP请求创建一个bean实例。 - **会话(Session)**:在Web应用中,每个HTTP会话创建一个bean实例。 - **全局...

    spring bean XML配置入门

    一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...

    使用java类配置Bean

    每个`@Bean`方法都会被Spring调用一次,以创建对应的Bean实例。 **依赖注入**:在Java配置中,依赖注入可以通过构造函数、setter方法或者字段注解实现。例如,如果`MyService`需要依赖`MyRepository`,可以这样修改...

    基于java的企业级应用开发:Bean的实例化.ppt

    这种方式需要我们创建一个包含静态方法的工厂类,该方法用于返回Bean实例。在配置文件中,除了指定`class`属性外,还需要添加`factory-method`属性,值为工厂类中创建Bean实例的静态方法名。如`beans2.xml`中定义的`...

    ejb实体bean实例

    ### 二、Eclipse中创建和配置EJB实体Bean 1. **新建EJB项目**:在Eclipse中,选择“File” -&gt; “New” -&gt; “Other” -&gt; “Enterprise” -&gt; “EJB Module”,输入项目名称,然后点击“Next”。 2. **创建实体Bean**...

    spring装配bean实例代码

    在本例中,我们将重点关注XML配置,对应的压缩包文件名为“springxmldemo”,这表明我们将讨论如何通过XML配置文件来定义和管理Bean。 1. **XML配置方式** XML配置是Spring早期的主要装配方式,通过`beans`元素...

    Spring项目bean基础配置代码

    - `request`和`session`:这两个作用范围仅在Web应用中适用,分别对应于每个HTTP请求和session创建一个Bean实例。 在XML配置中,我们可以这样设置Bean的作用范围: ```xml &lt;bean id="myPrototypeService" class=...

    spring管理bean应用实例代码

    - **初始化**:Spring容器在创建Bean实例后,可以调用`@PostConstruct`注解的方法进行初始化。 - **依赖注入**:Spring可以通过构造器、setter方法、字段或工厂方法来注入依赖。 - **销毁**:当Bean不再需要时,...

    Spring bean 管理

    在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...

    Spring Bean实例化实现过程解析

    在 Spring 框架中,Bean 的实例化是通过容器来管理的,容器会根据配置文件中的信息来实例化 Bean。下面我们将详细介绍 Spring Bean 实例化的实现过程。 1. 构造器实例化 在 Spring 框架中,默认情况下,容器会通过...

    spring的Bean配置说明

    Spring容器会解析这个文件并创建相应的Bean实例。 2. `&lt;bean&gt;` 元素:这是Spring配置中最常见的元素,它定义了一个特定的Java对象,即Bean。`class`属性用于指定Bean的完整类名,确保Spring知道要实例化的对象类型...

    spring学习之路(黑马课程笔记)

    scope属性默认为singleton,是一个单例,之后不管调用几次getbean(),只要是同一个beanName都会指向同一个bean实例。prototype则是生成原型,每调用一次getbean()都会生成一个新的。 Bean的实例化方式 在Spring框架...

    spring配置实例详解代码和测试

    `@Configuration`标注的类表示这是一个配置类,`@Bean`注解的方法会返回一个被Spring管理的Bean实例。 在依赖配置中,我们经常需要处理Bean之间的依赖关系。Spring支持构造器注入和setter注入两种方式。构造器注入...

    java自动生成bean 根据数据库表及字段(.net 2.0版本)

    "java自动生成bean 根据数据库表及字段(.net 2.0版本)" 提供了一种解决方案,它能够根据数据库的表结构自动生成对应的Java Bean类,极大地提高了开发效率。 这个工具支持.NET 2.0版本,虽然主要面向的是.NET环境...

    Eclipse spring基本配置步骤

    在Java源代码中创建对应的`HelloWorld`类: ```java package com.example; public class HelloWorld { private String message; public void setMessage(String message) { this.message = message; } ...

    Spring Bean 的生命周期

    4. **AOP代理**:如果Bean配置了AOP相关的注解或切面,Spring会创建对应的代理对象,使得在调用Bean方法时能进行拦截处理。 在容器销毁阶段,Spring Bean会经历: 1. **清理回调**:当容器关闭时,如果Bean实现了`...

    spring(一)–概念和历史/hellospring/IOC创建对象的方式/Spring配置/set注入/c命名和p命名空间注入/bean的作用域

    4. 预定义的Bean工厂:例如,使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext来加载XML配置文件,创建Bean实例。 【属性注入】 Spring支持通过setter方法注入属性,即set注入。在配置文件中...

    spring IOC反射装载bean

    这里,`init-method`指定的`initMethod`方法会在Bean实例化后被调用。 除了XML配置,Spring还支持基于注解的配置,如`@Component`、`@Service`、`@Repository`和`@Controller`,以及`@Autowired`用于自动装配依赖。...

Global site tag (gtag.js) - Google Analytics