说几种开发中常用的bean配置方法:
1.proporty配置:
用proporty配置,实体里要写setter方法
实体:Car.java
package com.lee.spring.beans;
public class Car {
private String name;
private int maxSpend;
public String getName() {
System.out.println("汽车的getter方法被调用");
return name;
}
public void setName(String name) {
System.out.println("汽车的setter方法被调用");
this.name = name;
}
public int getMaxSpend() {
return maxSpend;
}
public void setMaxSpend(int maxSpend) {
this.maxSpend = maxSpend;
}
@Override
public String toString() {
return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
}
}
Car-ApplicationContext.xml代码:
<!--这里的id="car",其中引号里的car是自定义的,但是通常写为类名的小写。-->
<bean id="car" class="com.lee.spring.beans.Car">
<property name="name" value="迈巴赫"/>
<property name="maxSpend" value="450"/>
</bean>
TestCar.java代码:
public class TestCar {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Car-ApplicationContext.xml");
//下面引号里的car和上面代码中id="car"是对应的
Car car=(Car) act.getBean("car");
System.out.println(car.toString());
}
}
运行截图:
2.constructor-arg配置
用constructor-arg配置,实体只需要有参构造,不需要无参构造,不需要setter方法
Book代码:
注意:这里的Book类只有一个构造方法。
public class Book {
private String name;
private Integer page;
public Book(String name, Integer page) {
System.out.println("Book的构造方法执行");
this.name = name;
this.page = page;
}
@Override
public String toString() {
return "Book [name=" + name + ", page=" + page + "]";
}
Book-ApplicationContext.xml代码:
<bean id="book" class="com.lee.spring.beans.Book">
<constructor-arg name="name" value="白夜行"/>
<constructor-arg name="page" value="400"/>
</bean>
TestBook代码:
public class TestBook {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Book-ApplicationContext.xml");
Book book= act.getBean("book",Book.class);
System.out.println(book.toString());
}
}
运行截图:
3.用p命名空间配置:
p命名空间用实体的setter方法
P命名空间作用是简化配置,需要先引入p的namespace
Car.java代码:
public class Car {
private String name;
private int maxSpend;
public String getName() {
System.out.println("汽车的getter方法被调用");
return name;
}
public void setName(String name) {
System.out.println("汽车的setter方法被调用");
this.name = name;
}
public int getMaxSpend() {
return maxSpend;
}
public void setMaxSpend(int maxSpend) {
this.maxSpend = maxSpend;
}
@Override
public String toString() {
return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
}
}
Car-p-ApplicationContext.xml代码:
<bean id="car2" class="com.lee.spring.beans.Car"
p:name="宾利"
p:maxSpend="420"
/>
TestCar2.java代码:
public class TestCar2 {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Car-p-ApplicationContext.xml");
Car car2=(Car) act.getBean("car2");
System.out.println(car2.toString());
}
}
运行截图:
4.bean之间的引用:
Student.Java代码:
public class Student {
private String name;
private int age;
private Book book;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("Student的setter方法被调用");
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", book=" + book + "]";
}
}
Book.java代码:
注意:这里的Book类只有一个构造方法。
public class Book {
private String name;
private Integer page;
public Book(String name, Integer page) {
System.out.println("Book的构造方法执行");
this.name = name;
this.page = page;
}
@Override
public String toString() {
return "Book [name=" + name + ", page=" + page + "]";
}
Student-ApplicationContext.xml代码:
<bean id="books" class="com.lee.spring.beans.Book">
<constructor-arg name="name" value="白夜行"/>
<constructor-arg name="page" value="400"/>
</bean>
<bean id="student" class="com.lee.spring.beans.Student">
<property name="name" value="夏洛"/>
<property name="book" ref="books"/>
</bean>
TestStudent代码:
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Student-ApplicationContext.xml");
Student s=(Student) act.getBean("student");
System.out.println(s.toString());
}
5.内部bean配置:
注意:
内部的bean一定要有默认构造,一定要有setter方法。两个一定都要有,两个一定都要有!
Student.Java代码:
public class Student {
private String name;
private int age;
private Book book;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("Student的setter方法被调用");
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", book=" + book + "]";
}
}
Book.java代码:
注意:一定要有setter方法和默认构造。
package com.lee.spring.beans;
public class Book {
private String name;
private Integer page;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("Book的setter方法执行");
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Book() {
super();
System.out.println("Book的默认构造方法执行");
}
public Book(String name, Integer page) {
System.out.println("Book的构造方法执行");
this.name = name;
this.page = page;
}
@Override
public String toString() {
return "Book [name=" + name + ", page=" + page + "]";
}
}
Student-ApplicationContext.xml代码:
<bean id="student2" class="com.lee.spring.beans.Student">
<property name="name" value="大春"/>
<property name="age" value="20"/>
<property name="book" >
<bean class="com.lee.spring.beans.Book">
<property name="name" value="巴黎圣母院"/>
<property name="page" value="460"/>
</bean>
</property>
</bean>
TestStudent.Java代码:
public class TestStudent {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Student-ApplicationContext.xml");
Student s2=(Student) act.getBean("student2");
System.out.println(s2.toString());
}
}
运行截图:
注意这里的执行顺序(和代码写的先后顺序无关):
①内部bean的默认构造
②内部bean的setter方法
6.list方式配置bean
如果一个叫马云的boss,有3块watch,而且要求说明每块watch的属性,怎么办呢?其中一种方法可以用list
Boss.Java代码:
package com.lee.spring.beans;
import java.util.List;
public class Boss {
private String name;
private List<Watch> watch;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("Boss的setter方法调用");
this.name = name;
}
public List<Watch> getWatch() {
return watch;
}
public void setWatch(List<Watch> watch) {
this.watch = watch;
}
@Override
public String toString() {
return "Boss [name=" + name + ", watch=" + watch + "]";
}
}
Watch.Java代码:
package com.lee.spring.beans;
public class Watch {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("Watch的setter方法调用");
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Watch [name=" + name + ", color=" + color + "]";
}
}
Boss-Watch-ApplicationContext.xml代码:
<!-- 配置watch -->
<bean id="watch1" class="com.lee.spring.beans.Watch">
<property name="name" value="劳力士"/>
<property name="color" value="red"/>
</bean>
<bean id="watch2" class="com.lee.spring.beans.Watch">
<property name="name" value="浪琴"/>
<property name="color" value="blue"/>
</bean>
<bean id="watch3" class="com.lee.spring.beans.Watch">
<property name="name" value="卡西欧"/>
<property name="color" value="green"/>
</bean>
<!-- list方式配置bean -->
<bean id="boss" class="com.lee.spring.beans.Boss">
<property name="name" value="马云"/>
<property name="watch">
<list>
<ref bean="watch1"/>
<ref bean="watch2"/>
<ref bean="watch3"/>
</list>
</property>
</bean>
TestBossWatch.java 代码:
public class TestBossWatch {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Boss-Watch-ApplicationContext.xml");
Boss boss= (Boss) act.getBean("boss");
System.out.println(boss.toString());
}
}
运行截图:
7.map方式配置bean
有一个叫李彦宏的人有两辆汽车,而且要说明汽车的属性。可以用map做。
Car.java代码:
package com.lee.spring.beans;
public class Car {
private String name;
private int maxSpend;
public String getName() {
System.out.println("汽车的getter方法被调用");
return name;
}
public void setName(String name) {
System.out.println("汽车的setter方法被调用");
this.name = name;
}
public int getMaxSpend() {
return maxSpend;
}
public void setMaxSpend(int maxSpend) {
this.maxSpend = maxSpend;
}
@Override
public String toString() {
return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
}
}
Person.Java代码:
package com.lee.spring.beans;
import java.util.Map;
import com.lee.spring.beans.Car;
public class Person {
private String name;
private Map<String, Car> car;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Car> getCar() {
return car;
}
public void setCar(Map<String, Car> car) {
System.out.println("map的set方法执行");
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", car=" + car + "]";
}
}
Person-Car-ApplicationContext.xml代码:
<!-- 配置Car -->
<bean id="car1" class="com.lee.spring.beans.Car">
<property name="name" value="保时泰"/>
<property name="maxSpend" value="260"/>
</bean>
<bean id="car2" class="com.lee.spring.beans.Car">
<property name="name" value="法拉太"/>
<property name="maxSpend" value="340"/>
</bean>
<!-- map方式配置bean -->
<bean id="person" class="com.lee.spring.beans.Person">
<property name="name" value="李彦宏"/>
<property name="car">
<map>
<entry key="a" value-ref="car1"></entry>
<entry key="b" value-ref="car2"></entry>
</map>
</property>
</bean>
TestPersonCar.Java代码:
public class TestPersonCar {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("Person-Car-ApplicationContext.xml");
Person person= (Person) act.getBean("person");
System.out.println(person.toString());
}
}
运行截图:
8.特殊的proporties
DataSource.Java代码:
package com.lee.spring.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 + "]";
}
}
DataSource-ApplicationContext.xml代码:
<!-- 配置Proporties属性 -->
<bean id="dataSource" class="com.lee.spring.beans.DataSource">
<property name="properties">
<props >
<prop key="username">root</prop>
<prop key="password">123456</prop>
<prop key="jdbcUrl">jdbc:mysql:</prop>
<prop key="driverClass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
TestDataSource.Java代码:
public class TestDataSource {
public static void main(String[] args) {
ApplicationContext act=new ClassPathXmlApplicationContext("DataSource-ApplicationContext.xml");
DataSource dataSource=(DataSource) act.getBean("dataSource");
System.out.println(dataSource.toString());
}
}
运行截图:
9.uitl的用法:
需要导入util的命名空间
ApplicationContext.xml代码:
<!-- 配置watch -->
<bean id="watch1" class="com.lee.spring.beans.Watch">
<property name="name" value="劳力士"/>
<property name="color" value="red"/>
</bean>
<bean id="watch2" class="com.lee.spring.beans.Watch">
<property name="name" value="浪琴"/>
<property name="color" value="blue"/>
</bean>
<!--配置util-->
<util:list id="watchs" >
<ref bean="watch1"/>
<ref bean="watch2"/>
</util:list>
<!--引用-->
<bean id="boss" class="com.lee.spring.beans.Boss">
<property name="name" value="马化腾"/>
<property name="watch" ref="watchs">
</property>
</bean>