0
点赞
收藏
分享

微信扫一扫

spring bean 简单总结

mm_tang 2022-02-21 阅读 34

创建对象的三种方式

无参构造方法

创建一个实体类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>

运行结果:

 

举报

相关推荐

0 条评论