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>
分享到:
相关推荐
在上述代码中,`staticFactoryBean`和`instanceFactoryBean`方法分别对应静态工厂和实例工厂方法,`@Bean`注解表示该方法将返回一个Bean实例。 总结来说,SSH笔记中提到的静态和实例工厂方法是Spring框架中创建Bean...
本文将详细介绍Spring中的三种主要的Bean实例化方式:XML配置、注解配置以及Java配置。 ### 1. XML配置 XML配置是Spring早期版本中最常见的Bean定义方式。在`spring_first`目录下的配置文件(如`beans.xml`)中,...
- **原型(Prototype)**:每次请求都会创建一个新的bean实例。 - **请求(Request)**:在Web应用中,每个HTTP请求创建一个bean实例。 - **会话(Session)**:在Web应用中,每个HTTP会话创建一个bean实例。 - **全局...
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
每个`@Bean`方法都会被Spring调用一次,以创建对应的Bean实例。 **依赖注入**:在Java配置中,依赖注入可以通过构造函数、setter方法或者字段注解实现。例如,如果`MyService`需要依赖`MyRepository`,可以这样修改...
这种方式需要我们创建一个包含静态方法的工厂类,该方法用于返回Bean实例。在配置文件中,除了指定`class`属性外,还需要添加`factory-method`属性,值为工厂类中创建Bean实例的静态方法名。如`beans2.xml`中定义的`...
### 二、Eclipse中创建和配置EJB实体Bean 1. **新建EJB项目**:在Eclipse中,选择“File” -> “New” -> “Other” -> “Enterprise” -> “EJB Module”,输入项目名称,然后点击“Next”。 2. **创建实体Bean**...
在本例中,我们将重点关注XML配置,对应的压缩包文件名为“springxmldemo”,这表明我们将讨论如何通过XML配置文件来定义和管理Bean。 1. **XML配置方式** XML配置是Spring早期的主要装配方式,通过`beans`元素...
- `request`和`session`:这两个作用范围仅在Web应用中适用,分别对应于每个HTTP请求和session创建一个Bean实例。 在XML配置中,我们可以这样设置Bean的作用范围: ```xml <bean id="myPrototypeService" class=...
- **初始化**:Spring容器在创建Bean实例后,可以调用`@PostConstruct`注解的方法进行初始化。 - **依赖注入**:Spring可以通过构造器、setter方法、字段或工厂方法来注入依赖。 - **销毁**:当Bean不再需要时,...
在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...
在 Spring 框架中,Bean 的实例化是通过容器来管理的,容器会根据配置文件中的信息来实例化 Bean。下面我们将详细介绍 Spring Bean 实例化的实现过程。 1. 构造器实例化 在 Spring 框架中,默认情况下,容器会通过...
Spring容器会解析这个文件并创建相应的Bean实例。 2. `<bean>` 元素:这是Spring配置中最常见的元素,它定义了一个特定的Java对象,即Bean。`class`属性用于指定Bean的完整类名,确保Spring知道要实例化的对象类型...
scope属性默认为singleton,是一个单例,之后不管调用几次getbean(),只要是同一个beanName都会指向同一个bean实例。prototype则是生成原型,每调用一次getbean()都会生成一个新的。 Bean的实例化方式 在Spring框架...
`@Configuration`标注的类表示这是一个配置类,`@Bean`注解的方法会返回一个被Spring管理的Bean实例。 在依赖配置中,我们经常需要处理Bean之间的依赖关系。Spring支持构造器注入和setter注入两种方式。构造器注入...
"java自动生成bean 根据数据库表及字段(.net 2.0版本)" 提供了一种解决方案,它能够根据数据库的表结构自动生成对应的Java Bean类,极大地提高了开发效率。 这个工具支持.NET 2.0版本,虽然主要面向的是.NET环境...
在Java源代码中创建对应的`HelloWorld`类: ```java package com.example; public class HelloWorld { private String message; public void setMessage(String message) { this.message = message; } ...
4. **AOP代理**:如果Bean配置了AOP相关的注解或切面,Spring会创建对应的代理对象,使得在调用Bean方法时能进行拦截处理。 在容器销毁阶段,Spring Bean会经历: 1. **清理回调**:当容器关闭时,如果Bean实现了`...
4. 预定义的Bean工厂:例如,使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext来加载XML配置文件,创建Bean实例。 【属性注入】 Spring支持通过setter方法注入属性,即set注入。在配置文件中...
这里,`init-method`指定的`initMethod`方法会在Bean实例化后被调用。 除了XML配置,Spring还支持基于注解的配置,如`@Component`、`@Service`、`@Repository`和`@Controller`,以及`@Autowired`用于自动装配依赖。...