版权声明:《==study hard and make progress every day==》 https://blog.csdn.net/qq_38225558/article/details/83247135
1.无参构造创建对象
<bean id=”标识” class=”完全限定名”/>
2.工厂方式创建对象
静态工厂:<bean id=”” class=”工厂类的完全限定名” factory-method=”工厂中创建对象的方法名” />
实例工厂:
<bean id=”” class=”工厂类的完全限定名”/>
<bean id=”” factory-bean=”工厂类的id” factory-method=”工厂中创建对象的方法名” />
bean类
public class User {
private Integer id;
public User() {}
public Integer getId() {
return id;
}
public User(Integer id) {
this.id = id;
}
@Override
public String toString() {
return "User [id=" + id + "]";
}
public void init(){
System.out.println("===初始化===");
}
public void destroy(){
System.out.println("===销毁===");
}
}
配置文件
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--
基本Bean配置:
id属性:标识配置的bean,唯一且不能有特殊符号【Spring3.2前】
name属性:和id功能相同,但可以使用特殊符号,Spring3.2后不区分id,name
class属性:配置bean的完全限定名
spring的生命周期:构造 -> 初始化->运行-> 销毁
配置多例的情况下,不会执行销毁,一般我们自己不会来配置这个生命周期。
而这个基本上Spring自身来使用,例如在Spring操作连接池的时候,它会在DateSource销毁的时候执行。
init-method="init" ==》初始化
destroy-method="destroy" ==》销毁
-->
<bean name="user" class="com.zhengqing.bean.User" init-method="init" destroy-method="destroy" ></bean>
<!--
Spring静态工厂方式获取对象:
相当于传统的代码:User user = StaticFactory.getUser();
factory-bean属性:用于工厂模式创建对象的形式,使用定义的工厂类的id
factory-method属性:工厂类中用于创建对象的方法
-->
<!-- <bean id="user2" class="com.zhengqing.factory.StaticFactory" factory-method="getUser" ></bean> -->
<!--
Spring实例工厂方式获取对象
相当于传统代码:InstanceFactory factory = new InstanceFactory(); User user = factory2.getUser();
factory-bean属性:用于工厂模式创建对象的形式,使用定义的工厂类的id
factory-method属性:工厂类中用于创建对象的方法
-->
<!-- <bean id="factory" class="com.zhengqing.factory.InstanceFactory" ></bean>
<bean id="user3" factory-bean="factory" factory-method="getUser" ></bean> -->
</beans>
测试类:
public class UserTest {
@SuppressWarnings("deprecation")
@Test //BeanFactory测试获取对象
public void test1() {
ClassPathResource resource = new ClassPathResource("application.xml");// 获取配置文件
XmlBeanFactory factory = new XmlBeanFactory(resource);// 获取BeanFactory的工厂对象
User u = (User) factory.getBean("user");// 从工厂中获取到对象
u.setId(666);
System.out.println(u);
}
@Test //使用自定义的静态工厂获取到user对象
public void testStaticFctory() throws Exception {
//①传统方式
User user = StaticFactory.getUser();
user.setId(1);
System.out.println(user);
//②使用Spring获取静态工厂创建的对象
ClassPathResource resource = new ClassPathResource("application.xml");// 获取配置文件
XmlBeanFactory factory = new XmlBeanFactory(resource);// 获取BeanFactory的工厂对象
User u = (User) factory.getBean("user2");// 从工厂中获取到对象
u.setId(2);
System.out.println(u);
}
@Test //使用自定义的实例工厂获取到user对象
public void testInstanceFctory() throws Exception {
//①传统方式
InstanceFactory factory2 = new InstanceFactory();
User user = factory2.getUser();
user.setId(1);
System.out.println(user);
//②使用Spring获取静态工厂创建的对象
ClassPathResource resource = new ClassPathResource("application.xml");// 获取配置文件
XmlBeanFactory factory = new XmlBeanFactory(resource);// 获取BeanFactory的工厂对象
User u = (User) factory.getBean("user3");// 从工厂中获取到对象
u.setId(2);
System.out.println(u);
}
@Test //测试自定义的初始化和销毁方法
public void testInitAndDestory() throws Exception {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("application.xml");// 获取配置文件
User u = (User) context.getBean("user");// 从工厂中获取到对象
System.out.println("没有设置值:"+u);
u.setId(1);
System.out.println("设置值:"+u);
User u2 = (User) context.getBean("user");
System.out.println(u2);
context.registerShutdownHook();//关闭spring容器
}
}