Spring杂记之Bean注入(xml)
来源:互联网 发布:魔镜数据 编辑:程序博客网 时间:2024/06/16 16:43
I. 声明一个简单的Bean
1. 声明bean:
package io.codetisan.spring;public class Singer { public void sing() { System.out.println("when i was young i'd listen to the radio"); }}
2. spring配置文件:
<?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.xsd"> <bean id="singer" class="io.codetisan.spring.Singer" /></beans>
3. 测试代码:
package io.codetisan.spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Singer singer = context.getBean("singer",Singer.class); singer.sing(); }}
II. 构造器注入
1. 声明bean
package io.codetisan.spring;public class Song { private String name; public Song(String name) { this.name = name; } public String getName(){ return this.name; }}
package io.codetisan.spring;public class Singer { private String name; private Song song; public Singer(String name, Song song) { this.name = name; this.song = song; } public void sing() { System.out.println("I'm " + name + " I'm singing " + song.getName()); }}
2. spring配置文件
<?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.xsd"> <bean id="song" class="io.codetisan.spring.Song" > <constructor-arg value="Yesterday Once More" /> </bean> <bean id="singer" class="io.codetisan.spring.Singer" > <constructor-arg value="Carpenters" /> <constructor-arg ref="song"/> </bean></beans>
如果引用的bean只使用一次,也可以如下声明:
<?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.xsd"> <bean id="singer" class="io.codetisan.spring.Singer"> <constructor-arg value="Carpenters" /> <constructor-arg> <bean class="io.codetisan.spring.Song"> <constructor-arg value="Yesterday Once More" /> </bean> </constructor-arg> </bean></beans>
3. 测试代码
同上
III. 注入Bean属性
1. 声明bean
package io.codetisan.spring;public class Song { private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; }}package io.codetisan.spring;import java.util.List;public class Singer { private String name; private Song song; private List<String> instruments; public String getName() { return name; } public void setName(String name) { this.name = name; } public Song getSong() { return song; } public void setSong(Song song) { this.song = song; } public void sing() { System.out.println("I'm " + name + " I'm singing " + song.getName()+" I can play with"+instruments.toString()); } public List<String> getInstruments() { return instruments; } public void setInstruments(List<String> instruments) { this.instruments = instruments; }}
2. spring配置文件
<?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.xsd"> <bean id="song" class="io.codetisan.spring.Song"> <property name="name" value="Yesterday Once More" /> </bean> <bean id="singer" class="io.codetisan.spring.Singer"> <property name="name" value="Carpenters" /> <property name="song" ref="song" /> <property name="instruments"> <list> <value>guitar</value> </list> </property> </bean></beans>
3. 测试代码
同上
spring提供了四种集合配置元素
当装配类型为数组或者java.util.Collection任意实现的属性时,选择< list>和< set>都是可以的
map和props示例
<map> <entry key="GUITAR" value-ref="guitar" /> </map> <map> <entry key-ref="guitarkey" value-ref="guitar" /> </map> <props> <prop key="GUITAR">strum</prop> </props>
IV. 工厂方法创建Bean
有时候,Bean只提供了静态工厂方法来实例化的方法,Spring可以通过< bean>元素的factory-method属性来装配工厂创建的Bean
声明Bean
package io.codetisan.spring;public class Stage { private Stage() { } private static class StageSingletonHolder { private static Stage instance = new Stage(); } public static Stage getInstance() { return StageSingletonHolder.instance; }}
2. spring配置文件
<?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.xsd"> <bean id="stage" class="io.codetisan.spring.Stage" factory-method="getInstance"/></beans>
3. 测试代码
package io.codetisan.spring;import org.junit.Assert;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Stage stage = context.getBean("stage",Stage.class); Assert.assertNotNull(stage); }}
V. 初始化和销毁Bean
当我们实例化一个Bean时,可能要执行一些初始化操作来确保该Bean处于可用状态,同样的,当Bean从容器中移除时,可能也需要做一些清理工作。Spring中可以通过init-method和destroy-method来完成这些功能
1. 声明Bean
package io.codetisan.spring;public class Singer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void sing() { System.out.println("I'm " + name ); } public void beforeSing(){ System.out.println("welcome..."); } public void afterSing(){ System.out.println("thank you..."); }}
2. spring配置文件
<?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.xsd"> <bean id="singer" class="io.codetisan.spring.Singer" init-method="beforeSing" destroy-method="afterSing"> <property name="name" value="Carpenters" /> </bean></beans>
VI. 使用Spring的命名空间p装配属性
Spring提供了一个p命名空间来简化xml的配置
如:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="song" class="io.codetisan.spring.Song"> <property name="name" value="Yesterday Once More" /> </bean> <bean id="singer" class="io.codetisan.spring.Singer" p:name="Carpenters" p:song-ref="song"/></beans>
等同于
<?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.xsd"> <bean id="song" class="io.codetisan.spring.Song"> <property name="name" value="Yesterday Once More" /> </bean> <bean id="singer" class="io.codetisan.spring.Singer"> <property name="name" value="Carpenters" /> <property name="song" ref="song" /> </bean></beans>
参考:《Spring实战 第3版》
0 0
- Spring杂记之Bean注入(xml)
- Spring的《XML显式装配bean》之通过构造器注入Bean
- Spring的《XML显式装配bean》之通过属性property注入bean
- spring 注入之 xml
- Spring用bean.xml注入对象
- osgi之blueprint.xml注入bean
- SSM搭建-Spring之bean的属性值XML注入方式(4)
- SSM框架项目搭建系列(四)— Spring之bean的XML注入方式
- 5、SSM框架-Spring之bean的属性值XML注入方式(5)
- spring servlet之注入bean对象
- Spring高级应用之注入嵌套Bean
- Spring 之 Bean的属性注入
- Spring入门之bean属性注入集合
- Spring(一)之IOC、bean、注入
- Spring杂记之Bean自动检测与自动装配
- Spring XML配置<Map>注入Bean属性举例
- 3.Spring bean常见属性的注入:applicationContext-beans.xml
- 4.Spring bean常见属性的注入:applicationContext-editor.xml
- html中字体英文
- 工作总结
- 欢迎使用CSDN-markdown编辑器
- Android Studio 安装
- OC中内存管理 assign, retain, copy 的 setter 和 getter 方法
- Spring杂记之Bean注入(xml)
- 使用virtualbox安装的Ubuntu,窗口分辨率过小,怎么调整
- hdu 1051 wooden sticks
- while练习*登陆系统*大小写转换*None与“”
- 《第一行代码--Android》读书笔记之使用通知和多媒体
- Android对不同DPI的dimen选择优先级问题
- 我的Bit路-C语言实现顺序
- 简单后台监控的实现
- DFS应用——遍历无向图