spring学习笔记二 属性配置
来源:互联网 发布:windows 虚拟机下载 编辑:程序博客网 时间:2024/06/11 04:54
一、字面值
1.字面值:可用字符串表示的值,可以通过使用<value>元素标签进行值得注入
2.字面值中含有特殊字符的字符串,使用<![CDATA[]]>标签进行值得注入
上代码:
Car.java
package spring;public class Car { private String brand; private String corp; private int price; private int maxSpeed; public Car(String brand, String corp, int price, int maxSpeed) {super();this.brand = brand;this.corp = corp;this.price = price;this.maxSpeed = maxSpeed;}@Overridepublic String toString() {return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";}public void setPrice(int price) {this.price = price;}}
applicationcontext.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloworld" class="spring.HelloWorld"> <property name="name" value="diyunlong"></property> </bean> <!--通过构造器来配置--> <bean id="car" class="spring.Car"> <constructor-arg value="Audi"></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value>//这里的 <shanghai^> 为特殊字符,如果想要完整输出字符串,必须将字符串包裹在<![CDATA[]]>中 </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean></beans>Main.java
package spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {// TODO Auto-generated method stub// 1.创建spring的IOC容器对象 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationcontext.xml");// 2.从IOC容器中获取bean实例 HelloWorld helloWorld=(HelloWorld)ctx.getBean("helloworld"); Car car= (Car) ctx.getBean("car"); System.out.println(car); }}
运行结果:
Car [brand=Audi, corp=<shanghai^>, price=300000, maxSpeed=240]
二、引用其他bean
在应用程序中,一个bean往往要与其他的bean相互协作才可以完成功能,要使bean能够相互访问,就必须要在配置文件中指定bean的引用。
1、在bean配置文件中,通过<ref>元素或者是ref属性或构造器参数对bean引用
2、也可以申明一个内部bean,
上代码:
新建一个person.java
package spring;public class person { private String name; private int age; private Car car;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return "person [name=" + name + ", age=" + age + ", car=" + car + "]";} }
Car.java
package spring;public class Car { private String brand; private String corp; private int price; private int maxSpeed; public Car(String brand, String corp, int price, int maxSpeed) {super();this.brand = brand;this.corp = corp;this.price = price;this.maxSpeed = maxSpeed;}@Overridepublic String toString() {return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";}public void setPrice(int price) { //如果采用级联属性配置时,没有set方法就会报错 this.price = price;}}
applicationcontex.java
<?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="helloworld" class="spring.HelloWorld"> <property name="name" value="diyunlong"></property> </bean> <!--通过构造器来配置--> <bean id="car" class="spring.Car"> <constructor-arg value="Audi"></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> <bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="car" ref="car"></property> <property name="car.price" value="30"></property> </bean> </beans>Main.java
package spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {// TODO Auto-generated method stub// 1.创建spring的IOC容器对象 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationcontext.xml");// 2.从IOC容器中获取bean实例 HelloWorld helloWorld=(HelloWorld)ctx.getBean("helloworld");// 3.调用hello方法 /* System.out.println(helloWorld);*/ Car car= (Car) ctx.getBean("car"); System.out.println(car); person person=(spring.person) ctx.getBean("person"); System.out.println(person);}}
运行结果:
Car [brand=Audi, corp=<shanghai^>, price=30, maxSpeed=240]
person [name=Tom, age=24, car=Car [brand=Audi, corp=<shanghai^>, price=30, maxSpeed=240]]
定义一个内部bean:
<bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="car"> <bean class="spring.Car"> <constructor-arg value="Audi"></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> </property> <property name="car.price" value="30"></property></bean>
三、null值和级联属性
可以使用专用的<null/>标签对bean字符串或其他类型属性进行赋空值。
例如
<bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="car"> <bean class="spring.Car"> <constructor-arg><null/></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> </property> <property name="car.price" value="30"></property> </bean>
spring也支持级联属性的配置
<bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="car"> <bean class="spring.Car"> <constructor-arg><null/></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> </property> <property name="car.price" value="30"></property> </bean>
如果采用级联属性,price必须有set方法,否则就会报错
四、集合属性
1、使用<list>来配置集合属性
一个人可以有多辆车,所以Person中的car是一个集合,更改后的person.java为:
person.java
package spring;import java.util.List;public class person { private String name; private int age; private List<Car> cars;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public List<Car> getCars() {return cars;}public void setCars(List<Car> cars) {this.cars = cars;}@Overridepublic String toString() {return "person [name=" + name + ", age=" + age + ", cars=" + cars + "]";} }
现在有两辆车,car和car1,更改后的applicationcontext.xml为:
applicationcontext.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloworld" class="spring.HelloWorld"> <property name="name" value="diyunlong"></property> </bean> <!--通过构造器来配置--> <bean id="car" class="spring.Car"> <constructor-arg value="Audi"></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> <bean id="car2" class="spring.Car"> <constructor-arg value="Dazhong"></constructor-arg> <constructor-arg> <value><![CDATA[<anhui^>]]></value> </constructor-arg> <constructor-arg value="500000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> <bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="cars"> <list> <ref bean="car"></ref> //引用car <ref bean="car2"></ref> //引用car1 </list> </property> </bean> </beans>
2.使用map配置集合属性
person.java
package spring;import java.util.List;import java.util.Map;public class person { private String name; private int age; private Map<String, Car> cars; private Map<String, String> imfor;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Map<String, Car> getCars() {return cars;}public void setCars(Map<String, Car> cars) {this.cars = cars;}public Map<String, String> getImfor() {return imfor;}public void setImfor(Map<String, String> imfor) {this.imfor = imfor;}@Overridepublic String toString() {return "person [name=" + name + ", age=" + age + ", cars=" + cars + ", imfor=" + imfor + "]";} }
applicationcontext.java<?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="helloworld" class="spring.HelloWorld"> <property name="name" value="diyunlong"></property> </bean> <!--通过构造器来配置--> <bean id="car" class="spring.Car"> <constructor-arg value="Audi"></constructor-arg> <constructor-arg> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg value="300000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> <bean id="car2" class="spring.Car"> <constructor-arg value="Dazhong"></constructor-arg> <constructor-arg> <value><![CDATA[<anhui^>]]></value> </constructor-arg> <constructor-arg value="500000"></constructor-arg> <constructor-arg value="240"></constructor-arg> </bean> <bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="cars"> <map> <entry key="wode" value-ref="car"></entry> <entry key="wode2" value-ref="car2"></entry> </map> </property> <property name="imfor"> <props> <prop key="user">diyunlong</prop> <prop key="password">123</prop> </props> </property> </bean> </beans>
从上面的配置来看有一个缺点:当我们配置多个bean时,都需要一个相同的集合,那么配置起来就会产生冗余的代码,那么我们可以将集合单独配置。
首先:
从上面的配置来看有一个缺点:当我们配置多个bean时,都需要一个相同的集合,那么配置起来就会产生冗余的代码,那么我们可以将集合单独配置。
首先:
更改好配置以后就可以改写集合了:
<util:map id="cars"> <entry key="wode" value-ref="car"></entry> <entry key="wode2" value-ref="car2"></entry> </util:map> <bean id="person" class="spring.person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="cars" ref="cars"> </property> <property name="imfor"> <props> <prop key="user">diyunlong</prop> <prop key="password">123</prop> </props> </property>五、使用p命名空间为了简化xml文件配置,越来越多的xml文件采用属性而非子元素配置信息。 Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 <bean> 元素属性的方式配置 Bean 的属性。首先按照上面的方法将p命名空间导入
导入p命名空间之后,改写bean:
<bean id="person1" class="spring.person" p:age="30" p:name="diyunlong" p:cars-ref="cars"></bean>
- spring学习笔记二 属性配置
- spring boot 学习笔记(二):项目属性配置
- Spring Boot学习笔记:(二)常规属性配置
- spring-boot笔记-属性配置(二)
- Spring学习笔记之属性配置细节
- Spring beans配置方案(二) 学习笔记
- Spring学习笔记(二)Bean配置
- Spring入门学习——bean属性配置(二)
- Spring学习笔记(二)----Spring AOP配置与应用
- 【spring学习笔记二】使用注解配置spring
- Spring学习笔记(10)----公共属性的注入配置
- Spring学习笔记(10)----公共属性的注入配置
- Spring Boot学习笔记-项目属性的简单配置
- Spring学习笔记二
- Spring学习笔记二
- spring学习笔记二
- spring学习笔记二
- 学习Spring笔记二
- 背包dp
- TCP和UDP的区别
- Flight Boarding Optimization
- java多线程脏读演式
- redhat linux安装mysql数据库
- spring学习笔记二 属性配置
- Tools
- 启动子容器失败:A child container failed during start
- 单例模式
- PCA详解
- 身份证识别SDK开发包20170904
- 数据库
- iOSLaunchImage
- PCA详解