package exm.spring.bean;
public class User {
private String name;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
package exm.spring.bean;
public class Car {
private String name;
private String color;
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(String name, String color) {
super();
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [name=" + name + ", color=" + color + "]";
}
}
package exm.spring.bean;
public class Student {
private String name;
private String id;
private String address;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, String id, String address) {
super();
this.name = name;
this.id = id;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + ", address=" + address
+ "]";
}
}
package exm.spring.bean;
public class Faculty {
private String name;
private String id;
private String address;
public Faculty() {
super();
// TODO Auto-generated constructor stub
}
public Faculty(String name, String id, String address) {
super();
this.name = name;
this.id = id;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Faculty [name=" + name + ", id=" + id + ", address=" + address
+ "]";
}
}
package exm.spring.bean;
public class StaticFactory {
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser()
{
return this.user;
}
public static User getBean()
{
return new User("李佳佳", "12345678");
}
}
package exm.spring.bean;
public class InstanceFactory {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public User getBean()
{
return user;
}
}
package exm.spring.bean;
import org.springframework.beans.factory.FactoryBean;
/**
* 实现了FactoryBean的类配置在容器中,
* 但是容器getBean()获取的是该类getObject()返回的类
* @author Administrator
*
*/
public class CarFactory implements FactoryBean<Car> {
private Car car;
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public Car getObject() throws Exception {
return car;
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
//测试类
package exm.spring.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
@org.junit.Test
public void test()
{
/**
* 下面是测试实例化bean的三种方式
*/
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
User user1 = (User) ac.getBean("user");
System.out.println(user1.toString());
User user2 = (User) ac.getBean("user2");
System.out.println(user2.toString());
User user3 = (User) ac.getBean("user3");
System.out.println(user3.toString());
Car car = (Car) ac.getBean("car");
System.out.println(car);
/**
* 下面是测试父bean和子bean
*/
Student student = ac.getBean("student", Student.class);
Faculty faculty = ac.getBean("faculty", Faculty.class);
System.out.println(student.toString());
System.out.println(faculty.toString());
//销毁容器
((ClassPathXmlApplicationContext)ac).close();
}
}
<!-- 配置文件 -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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的三种方式 -->
<!-- 基本方式 -->
<bean id="user" class="exm.spring.bean.User" scope="singleton" p:name="Jack" p:password="123"/>
<!-- 静态工厂方法:下面配置相当于StaticFactory.getBean(); -->
<bean id="user2" class="exm.spring.bean.StaticFactory" scope="singleton"
factory-method="getBean">
</bean>
<!-- 实例工厂方法:下面配置相当于(new InstanceFactory()).getBean(); 但要先把InstanceFactory配上-->
<bean id="instanceFactory" class="exm.spring.bean.InstanceFactory">
<property name="user">
<bean class="exm.spring.bean.User" p:name="林金智" p:password="12345678"/>
</property>
</bean>
<bean id="user3" scope="singleton"
factory-bean="instanceFactory"
factory-method="getBean"
/>
<!-- 实现FactoryBean的类:
getBean()返回的不是FactoryBean的实例,而是FactoryBean的getObject()
所得到的实例
-->
<bean id="car" class="exm.spring.bean.CarFactory">
<property name="car">
<bean class="exm.spring.bean.Car" p:name="布加迪" p:color="白色"/>
</property>
</bean>
<!-- 如果没有配置父bean,正常的配置如下,它们都有共同的属性address -->
<!--
<bean id="student" class="exm.spring.bean.Student">
<property name="name" value="Tim"/>
<property name="id" value="12345678"/>
<property name="address" value="Guangzhou"/>
</bean>
<bean id="faculty" class="exm.spring.bean.Faculty">
<property name="name" value="Jack"/>
<property name="id" value="22313132424"/>
<property name="address" value="Guangzhou"/>
</bean>
-->
<!-- 配置了父bean,相当于配置了一个模板,容器不能实例化这个bean -->
<bean id="template" abstract="true">
<property name="address" value="Guangzhou"/>
</bean>
<bean id="student" class="exm.spring.bean.Student" parent="template">
<property name="name" value="Tim"/>
<property name="id" value="12345678"/>
</bean>
<bean id="faculty" class="exm.spring.bean.Faculty" parent="template">
<property name="name" value="Jack"/>
<property name="id" value="22313132424"/>
</bean>
</beans>
转载于:https://my.oschina.net/ChiLin/blog/387087