创建对象的三种方式
无参构造方法
创建一个实体类User:
package com.example.demo.test;
public class User {
private String name ;
private Integer old;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOld() {
return old;
}
public void setOld(Integer old) {
this.old = old;
}
public User() {
}
public User(String name, Integer old) {
this.name = name;
this.old = old;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", old=" + old +
'}';
}
}
无参构造方法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="user" class="com.example.demo.test.User"></bean>
</beans>
测试类:
@Test
void contextLoads() {
//1.加载配置文件
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取bean对象
User user = (User) app.getBean("user");
System.out.println(user);
}
运行结果:
有参构造方法:
无参构造方法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="user" class="com.example.demo.test.User">
<constructor-arg name="name" value="张三"></constructor-arg>
<constructor-arg name="old" value="18"></constructor-arg>
</bean>
</beans>
运行结果:
工厂模式创建对象:
创建一个实体类UsersFactory:
package com.example.demo.test;
public class UsersFactory {
public User getInstance(){
return new User("李四",19);
}
}
工厂模式创建对象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="user" class="com.example.demo.test.User">
<constructor-arg name="name" value="张三"></constructor-arg>
<constructor-arg name="old" value="18"></constructor-arg>
</bean>
<!-- 工厂模式创建对象 -->
<bean id="factory" class="com.example.demo.test.UsersFactory"></bean>
<bean id="user2" factory-bean="factory" factory-method="getInstance"></bean>
</beans>
运行结果:
Bean生命周期:
生命周期图:
生命周期测试:
创建MyBeanPostProcessor实现BeanPostProcessor接口完成:
package com.example.demo.test;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
// @Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("MyBeanPostProcessor前置:"+beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("MyBeanPostProcessor后置");
return bean;
}
}
创建user实体类:
package com.example.demo.test;
import org.springframework.beans.factory.InitializingBean;
public class User {
private String name ;
private Integer old;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("第二步填充属性");
this.name = name;
}
public Integer getOld() {
return old;
}
public void setOld(Integer old) {
this.old = old;
}
public User() {
System.out.println("第一步初始化:");
}
public void initUser(){
System.out.println("第三步初始化");
}
public void destory(){
System.out.println("第五步销毁");
}
public User(String name, Integer old) {
this.name = name;
this.old = old;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", old=" + old +
'}';
}
}
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="beanPostProcessor" class="com.example.demo.test.MyBeanPostProcessor">
</bean>
<bean id="user" class="com.example.demo.test.User" init-method="initUser" destroy-method="destory">
<property name="name" value="张三"></property>
<property name="old" value="18"></property>
</bean>
<!-- 工厂模式创建对象
<bean id="factory" class="com.example.demo.test.UsersFactory"></bean>
<bean id="user2" factory-bean="factory" factory-method="getInstance"></bean> -->
</beans>
运行结果: