Spring学习(1)--使用xml配置Bean属性
2017-12-09 22:39
639 查看
使用xml配置Bean属性之前需要先定义对应的XML和对应xsd文件:
依赖注入主要有三种方式:
1.setter注入
2.构造器注入
3.接口注入
由于接口注入使用很少,这里主要写下前面两种注入属性的方式。
1.使用setter方式
Java文件代码:
xml文件代码:
测试代码:
2.使用构造器方式
Java文件代码:
xml文件代码:
3.属性值特殊字符的注入,如xml中的特殊字符"<"">"使用<!CDATA[xxx]>
xml文件代码:
4.null值的注入
5.使用ref引用其他Bean,引用的是其他Bean的id
java文件代码:
xml文件代码:
6.使用内部Bean
7.为级联属性赋值
上面代码中必须先初始化id为car的Bean,否则报错
8.为list集合属性赋值
将person类中的car属性改为:
测试结果:
如上面代码所示<list>节点引用了其他Bean,若注入的值是基本数据类型,写法如下:
set集合和数组类型的属性注入方式与list集合类似,区别在与list集合使用<list>节点,set集合使用<set>节点,数组使用<array>节点。
9.为Map类型属性赋值
将person类中的car属性改为:
10.配置Properties类型属性值
Java文件代码:
xml文件代码:
11.使用util命名空间,配置独立的集合Bean,可供其他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">
依赖注入主要有三种方式:
1.setter注入
2.构造器注入
3.接口注入
由于接口注入使用很少,这里主要写下前面两种注入属性的方式。
1.使用setter方式
Java文件代码:
package com.study.beans; public class HelloWorld { private String name; public void setName(String name) { System.out.println("setName()"+name); this.name = name; } public HelloWorld(){ System.out.println("HelloWorld的无参构造器"); } public void hello(){ System.out.println("hello"+name); } }
xml文件代码:
<!--setter方式属性注入 --> <bean id="helloWorld" class="com.study.beans.HelloWorld"> <property name="name" value="zhang"></property> </bean>
测试代码:
public class TestDemo { @Test public void test(){ //1.加载spring配置文件,根据配置创建对象 //ClassPathXmlApplicationContext是ApplicationContext接口的实现类,该类从类路径下加载配置文件 ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); //2.获取Bean HelloWorld helloWorld=(HelloWorld) app.getBean("helloWorld"); System.out.println(helloWorld); } }测试结果:
HelloWorld的无参构造器 setName()zhang
2.使用构造器方式
Java文件代码:
package com.study.beans; public class CarDemo { private String brand; private String corp; private double price; private int maxSpeed; public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed; } public CarDemo(String brand, String corp, double price) { super(); this.brand = brand; this.corp = corp; this.price = price; } public CarDemo(String brand, String corp, int maxSpeed) { super(); this.brand = brand; this.corp = corp; this.maxSpeed = maxSpeed; } public CarDemo(String brand, String corp, double price, int maxSpeed) { super(); this.brand = brand; this.corp = corp; this.price = price; this.maxSpeed = maxSpeed; } @Override public String toString() { return "CarDemo [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]"; } }
xml文件代码:
<!--构造器方式属性注入 --> <bean id="carDemo" class="com.study.beans.CarDemo"> <constructor-arg value="BMW"></constructor-arg> <constructor-arg value="HEFEI"></constructor-arg> <constructor-arg value="6900"></constructor-arg> </bean>
3.属性值特殊字符的注入,如xml中的特殊字符"<"">"使用<!CDATA[xxx]>
xml文件代码:
<!--特殊字符可以使用<!CDATA[xxx]>方式注入 --> <bean id="carDemo1" class="com.study.beans.CarDemo"> <constructor-arg index="0" type="String"> <value><![CDATA[<DGDG>]]></value> </constructor-arg> <constructor-arg index="1" type="String"> <value>822</value> </constructor-arg> <constructor-arg value="6900" index="2" type="int"></constructor-arg> </bean>测试结果:
CarDemo [brand=<DGDG>, corp=822, price=0.0, maxSpeed=6900]
4.null值的注入
<!-- null值使用<null/>注入 --> <bean id="carDemo2" class="com.study.beans.CarDemo"> <constructor-arg value="Bmw" index="0" type="String"></constructor-arg> <constructor-arg> <null/> </constructor-arg> <constructor-arg > <value>822.0</value> </constructor-arg> </bean>
5.使用ref引用其他Bean,引用的是其他Bean的id
java文件代码:
package com.study.beans; public class Person { private String name; private int age; private CarDemo car; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } public CarDemo getCar() { return car; } public void setCar(CarDemo car) { this.car = car; } public Person() { } public Person(String name, i b155 nt age, CarDemo car) { super(); this.name = name; this.age = age; this.car = car; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; } }
xml文件代码:
<!-- 使用ref引用其他Bean --> <bean id="person1" class="com.study.beans.Person"> <property name="name" value="zhangshiwei"></property> <property name="age" value="23"></property> <property name="car" ref="carDemo2"></property> </bean>
6.使用内部Bean
<!-- 内部Bean,只能在内部使用,不能被外部引用 --> <bean id="person2" class="com.study.beans.Person"> <property name="name" value="zhangshiwei"></property> <property name="age" value="23"></property> <property name="car"> <bean class="com.study.beans.CarDemo"> <constructor-arg value="Bmw" index="0" type="String"></constructor-arg> <constructor-arg><null/></constructor-arg> <constructor-arg > <value>822.0</value> </constructor-arg> </bean> </property> </bean>
7.为级联属性赋值
<!--为级联属性赋值 --> <bean id="person3" class="com.study.beans.Person"> <constructor-arg name="name" value="zhangshiwei"></constructor-arg> <constructor-arg name="age" value="23"></constructor-arg> <constructor-arg name="car" ref="carDemo2"></constructor-arg> <property name="car.maxSpeed" value="444"></property> </bean>
上面代码中必须先初始化id为car的Bean,否则报错
8.为list集合属性赋值
将person类中的car属性改为:
public class PersonListCar { private String name; private int age; private List<CarDemo> cars;
<!--为list集合属性赋值 --> <bean id="personListCar" class="com.study.beans.PersonListCar"> <constructor-arg name="name" value="zhangshiwei"></constructor-arg> <constructor-arg name="age" value="23"></constructor-arg> <constructor-arg name="cars"> <list> <ref bean="carDemo"/> <ref bean="carDemo1"/> <ref bean="carDemo2"/> </list> </constructor-arg> </bean>
测试结果:
PersonListCar [name=zhangshiwei, age=23, cars=[CarDemo [brand=BMW, corp=HEFEI, price=0.0, maxSpeed=6900], CarDemo [brand=<DGDG>, corp=822, price=0.0, maxSpeed=6900], CarDemo [brand=Bmw, corp=null, price=822.0, maxSpeed=444]]]
如上面代码所示<list>节点引用了其他Bean,若注入的值是基本数据类型,写法如下:
<list> <value>list1</value> <value>list2</value> <value>list3</value> </list>
set集合和数组类型的属性注入方式与list集合类似,区别在与list集合使用<list>节点,set集合使用<set>节点,数组使用<array>节点。
9.为Map类型属性赋值
将person类中的car属性改为:
public class PersonMapCar { private String name; private int age; private Map<String,CarDemo> car;
<!--为Map类型属性赋值 --> <bean id="personMapCar" class="com.study.beans.PersonMapCar"> <constructor-arg name="name" value="zhangshiwei"></constructor-arg> <constructor-arg name="age" value="23"></constructor-arg> <constructor-arg name="car"> <map> <entry key="car1" value-ref="carDemo"/> <entry key="car2" value-ref="carDemo1"/> <entry key="car3" value-ref="carDemo2"/> </map> </constructor-arg> </bean>测试结果:
PersonMapCar [name=zhangshiwei, age=23, car={car1=CarDemo [brand=BMW, corp=HEFEI, price=0.0, maxSpeed=6900], car2=CarDemo [brand=<DGDG>, corp=822, price=0.0, maxSpeed=6900], car3=CarDemo [brand=Bmw, corp=null, price=822.0, maxSpeed=444]}]
10.配置Properties类型属性值
Java文件代码:
package com.study.beans; import java.util.Properties; public class DataSource { private Properties properties; public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public String toString() { return "DataSource [properties=" + properties + "]"; } }
xml文件代码:
<!--配置Properties类型属性值 --> <bean id="dataSource" class="com.study.beans.DataSource"> <property name="properties"> <props> <prop key="user">root</prop> <prop key="password">root</prop> <prop key="jdbcUrl">jdbc:mysql:///test</prop> <prop key="driverClass">com.mysql.jdbc.Driver</prop> </props> </property> </bean>测试结果:
DataSource [properties={driverClass=com.mysql.jdbc.Driver, user=root, password=root, jdbcUrl=jdbc:mysql:///test}]
11.使用util命名空间,配置独立的集合Bean,可供其他Bean引用
<!-- 使用util命名空间,配置独立的集合Bean,可供其他Bean引用 ,需要先引入util命名空间--> <util:list id="car"> <ref bean="carDemo"/> <ref bean="carDemo1"/> <ref bean="carDemo2"/> </util:list> <bean id="personListCar1" class="com.study.beans.PersonListCar"> <constructor-arg name="name" value="zhangshiwei"></constructor-arg> <constructor-arg name="age" value="23"></constructor-arg> <constructor-arg name="cars" ref="car"></constructor-arg> </bean>引入的util命名空间:
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">[/code] 12.使用p命名空间为Bean的属性赋值<!--使用p命名空间为Bean的属性赋值 ,需要先导入p命名空间--> <bean id="personListCar2" class="com.study.beans.PersonListCar" p:name="ZhangShiWei" p:age="23" p:cars-ref="car"></bean>引入的p命名空间:xmlns:p="http://www.springframework.org/schema/p"
13.使用c命名空间注入构造参数的属性<!--使用c命名空间注入构造参数的属性 ,需要先导入c命名空间 --> <bean id="personListCar3" class="com.study.beans.PersonListCar" c:_0="ZHANGSHIwei" c:_1="23" c:_2-ref="car"></bean>
引入的c命名空间:xmlns:c="http://www.springframework.org/schema/c"
相关文章推荐
- SpringBoot内部配置:“application.properties配置”和”使用XML配置”,读取属性文件中的内容,日志配置,Profile配置(学习:SpringBoot实战)
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
- Spring根据XML配置文件注入属性 其实也是造bean,看看是使用constructor还是setter顺带完成属性赋值
- Spring学习笔记 使用XML配置实现Bean的auto-wiring (自动绑定)
- Spring4 学习笔记(3)-Spring 基于 XML 的方式配置 Bean(供自己学习)
- 学习《Spring实战(第3版)》扎记1:Spring使用注解配置Bean的方式
- Spring-Context之三:使用XML和Groovy DSL配置Bean
- Spring学习笔记 在XML配置文件中使用properties文件的键值
- spring管理属性配置文件properties——使用PropertiesFactoryBean
- Spring学习笔记 使用annotation配置实现Bean的auto-wiring (自动绑定)
- Spring-Bean配置-使用外部属性文件
- Spring学习笔记 关于Bean定义的重用-使用abstract以及parent标签属性
- 简化Spring的XML配置(一)——自动装配bean属性
- Spring学习笔记之Spring中applicationContext.xml的bean里的id和name属性区别
- spring3 混合使用 XML 与注解(Annotation)进行 Bean 的配置
- Spring视频学习(十)使用XML配置事务
- Spring ApplicationContext.xml配置的12个技巧和Bean属性说明
- spring学习笔记(12)——使用注解方式配置bean
- spring学习5-注解式bean配置+Junit简易使用