学习的Spring实战(第三版)Bean的简单应用
1.创建一个表演者的接口
package com.performer.service;
public interface Performer {
void perform();
}
2.创建一个杂技师表演者Bean,杂技师空中抛球(beanBags),抛的越多越厉害,默认有3个
package com.performer.service.impl;
import com.performer.service.Performer;
public class Juggler implements Performer {
private int beanBags = 3;
public Juggler() {
}
public Juggler(int beanBags) {
this.beanBags = beanBags;
}
@Override
public void perform() {
System.out.println("Juggler "+beanBags+" beanBags");
}
}
3.配置文件Spring1.xml中加载Bean,实例化杂技师(Duke)
<?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 id="duke" class="com.performer.service.impl.Juggler">
</bean>
</beans>
4.加载配置文件Spring1.xml,测试Duke,输出他拥有的beanBags
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.performer.service.impl.Juggler;
public class SpringTest {
public static void main(String []args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring1.xml");
Juggler juggle = (Juggler) context.getBean("duke");
juggle.perform();
}
}
5.测试结果,如下所示
6.通过构造器,让Duke拥有15个beanBags,配置文件如下
<bean id="duke" class="com.performer.service.impl.Juggler">
<constructor-arg value="15"></constructor-arg>
</bean>
</beans>
7.加载配置文件Spring2.xml,测试Duke,输出他拥有的beanBags
public class SpringTest { public static void main(String []args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring2.xml"); Juggler juggle = (Juggler) context.getBean("duke"); juggle.perform(); } }
8.测试结果如下所示
现在创建一个会唱诗歌的杂技师
9.创建诗歌借口
package com.poem.service; public interface Poem { void recite(); }
10.创建一首诗
package com.poem.service.impl; import com.poem.service.Poem; public class Sonnet implements Poem { Sonnet() { } private String[] s={"百日依山尽","黄河入海流","欲穷千里目","更上一层楼"}; @Override public void recite() { for(int i=0;i<s.length;i++) { System.out.println(s[i]); } } }
11.创建会朗诵诗歌的杂技师PoeticJuggler
package com.performer.service.impl; import com.poem.service.Poem; public class PoeticJuggler extends Juggler { private Poem poem; public PoeticJuggler(Poem poem) { super(); this.poem = poem; } public PoeticJuggler(int beanBags,Poem poem) { super(beanBags); this.poem = poem; } public void perform() { super.perform(); System.out.println("while reciting..."); poem.recite(); } }
12.将诗歌给Duke,让Duke成为PoeticJuggler,配置文件如下
<bean id="duke" class="com.performer.service.impl.PoeticJuggler"> <constructor-arg value="15"></constructor-arg> <constructor-arg ref="sonnet"></constructor-arg> </bean> <bean id="sonnet" class="com.poem.service.impl.Sonnet"></bean>
13.加载Spring3.xml,进行测试,查看结果Duke成为会诗歌的杂技师
public class SpringTest { public static void main(String []args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring3.xml"); Juggler juggle = (Juggler) context.getBean("duke"); juggle.perform(); } }
14.运行结果如下所示
其它装配Bean的写法,如下
15.注入简单值,见Spring4.xml
<bean id="jake" class="com.performer.service.impl.Instrumentalist"> <property name="song" value="small star"></property> </bean>
16.引用其他Bean,见Spring5.xml
<bean id="jake" class="com.performer.service.impl.Instrumentalist"> <property name="song" value="small star"></property> <property name="instrument" ref="piano"></property> </bean> <bean id="piano" class="com.instrument.service.impl.Piano"></bean>
17.注入内部Bean,见Spring6.xml和Spring7.xml
<bean id="jake" class="com.performer.service.impl.Instrumentalist"> <property name="song" value="small star"></property> <property name="instrument"> <bean class="com.instrument.service.impl.Saxophone"></bean> </property> </bean> <bean id="saxophone" class="com.instrument.service.impl.Saxophone"></bean>
<bean id="duke" class="com.performer.service.impl.PoeticJuggler"> <constructor-arg value="15"></constructor-arg> <constructor-arg > <bean class="com.poem.service.impl.Sonnet"></bean> </constructor-arg> </bean>
18.使用Spring命名空间p装配属性Spring8.xml
19.装配集合
<bean id="hank" class="com.performer.service.impl.OneManBand"> <property name="instruments" > <!-- 使用set --> <!-- <set> <ref bean="guitar"/> <ref bean="piano"/> <ref bean="saxophone"/> </set> --> <!-- 使用list --> <!-- <list> <ref bean="guitar"/> <ref bean="piano"/> <ref bean="saxophone"/> </list> --> <!-- 使用map --> <map> <entry key="GUITAR" value-ref="guitar"></entry> <entry key="PIANO" value-ref="piano"></entry> <entry key="SAXOPHONE" value-ref="saxophone"></entry> </map> <!-- 使用props --> <!-- <props> <prop key="GUITAR">wing wing wing...</prop> <prop key="PIANO">ding ding ding...</prop> <prop key="SAXOPHONE">plink plink plink...</prop> </props> --> </property> </bean> <bean id="guitar" class="com.instrument.service.impl.Guitar"></bean> <bean id="saxophone" class="com.instrument.service.impl.Saxophone"></bean> <bean id="piano" class="com.instrument.service.impl.Piano"></bean>
20.测试装配集合
public class OneManBand implements Performer { public OneManBand() { } /*使用list*/ private List<Instrument> instruments; @Override public void perform() { for(Instrument instrument : instruments) { instrument.play(); } } public List<Instrument> getInstruments() { return instruments; } public void setInstruments(List<Instrument> instruments) { this.instruments = instruments; } /*使用Map*/ /*private Map<String,Instrument> instruments; @Override public void perform() { for(String key : instruments.keySet()) { System.out.print(key+":"); Instrument instrument = instruments.get(key); instrument.play(); } } public Map<String,Instrument> getInstruments() { return instruments; } public void setInstruments(Map<String,Instrument> instruments) { this.instruments = instruments; }*/ /*使用Collection*/ /*private Collection<Instrument> instruments; @Override public void perform() { for(Instrument instrument : instruments) { instrument.play(); } } public Collection<Instrument> getInstruments() { return instruments; } public void setInstruments(Collection<Instrument> instruments) { this.instruments = instruments; }*/ }
21.运行结果如下所示
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
在Spring容器初始化时,它会根据配置加载Bean的定义,并根据需要创建Bean实例。Bean的生命周期大致分为以下几个阶段:构造、初始化、正常使用、销毁。如果一个Bean被创建了两次,那么可能是在构造或初始化阶段出现了...
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
在Spring框架中,bean的实例化是其核心功能之一,它允许我们管理应用程序中的对象生命周期。本篇将详细探讨两种工厂方法——实例工厂方法和静态...在实际项目中,应根据实际情况权衡利弊,选择最适合的Bean实例化策略。
- **场景介绍**:通过一个简单的案例来展示如何在普元EOS中创建和使用SpringBean。 - **关键知识点**: - **SpringBean开发**:了解如何在EOS平台上创建和配置SpringBean。 - **SpringBean调用**:掌握如何在其他...
Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中...通过分析 SpringApplication 的源码,我们可以更好地理解 Spring Bean 加载过程的实现细节,并且能够更好地使用 Spring 框架开发应用程序。
1. **实例化**:Spring容器在遇到一个Bean定义时,会通过反射机制创建Bean实例。如果Bean定义中有`factory-method`属性,那么Spring会调用指定的方法来实例化Bean,而不是使用默认的构造器。 2. **属性注入**:实例...
这是Spring创建Bean实例的基础。 - **id属性**:是Bean在BeanFactory中的唯一标识符,用于通过BeanFactory获取Bean实例。例如,`<bean id="myBean" class="com.example.MyClass">`。 - **name属性**:类似于`id`...
- **初始化**:Spring容器在创建Bean实例后,可以调用`@PostConstruct`注解的方法进行初始化。 - **依赖注入**:Spring可以通过构造器、setter方法、字段或工厂方法来注入依赖。 - **销毁**:当Bean不再需要时,...
Spring允许自定义BeanPostProcessor,它们在Bean实例化后执行特定的处理,比如AOP代理。这些后处理器将在Bean实例化后,初始化前介入。 7. **Bean初始化**: 实例化完成后,Spring会执行Bean的初始化方法,包括...
主要介绍了Spring Bean基本管理,以实例形式较为详细的分析了Spring Bean的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
在上面的代码中,我们使用@Configuration注解来配置Bean的初始化和销毁,并使用@Bean注解来创建Bean实例。 四、总结 在本文中,我们详细讲解了Spring Bean的初始化和销毁,包括使用@Bean的initMethod和...
在Java代码中,使用`ClassPathXmlApplicationContext`加载XML配置文件,并通过Bean的ID获取并使用Bean实例。 ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); MyService ...
- 使用静态工厂方法实例化:这种方式通过调用一个静态方法来获取Bean实例,适用于简单工厂模式。 - 使用实例工厂方法实例化:类似于静态工厂方法,但工厂方法是非静态的,需要先创建工厂类的实例后再调用。 - ...
如果定义了`@PostConstruct`注解的方法,这个方法会在Bean实例化后但初始化前执行。 2. **属性注入**:Spring会根据Bean定义中的依赖注入(DI)信息,将其他Bean的引用或值设置到当前Bean的属性上。这可以通过...
在Spring 3.0及以上版本,还可以通过注解配置实现Bean实例化,如使用`@Component`、`@Service`、`@Repository`和`@Controller`注解标记类为Bean,以及`@Autowired`进行依赖注入。此外,`@Bean`注解可以用于Java配置...
默认情况下,Spring使用无参构造器创建Bean实例。 3. **属性注入** 实例化后的Bean,Spring会根据配置信息注入依赖。这可以通过属性值、构造函数参数、setter方法等方式实现。如果Bean之间有依赖关系,Spring会先...