bean拷贝和json面试题

这段Java代码创建了两个类A和B,使用Builder模式构建了B类的实例,并使用BeanUtils.copyProperties方法将B的属性复制到A中。注意,A类的getPhone方法返回name与 est的拼接。最后,代码打印了A的类名、toString结果和转换成JSONObject的表示。

 以下代码会输出什么,为什么

public class InterviewQ {

    public static void main(String[] args) {

        B b = B.builder()
                .name("小黑")
                .age("17")
                .phone("131")
                .build();

        A a = new A();

        // getter取值赋值?
        BeanUtils.copyProperties(b, a);

        System.out.println( a.getClass());
        // 调用的是 toString
        System.out.println(a);
        // getter取值拼接输出?
        System.out.println(JSONObject.toJSON(a));
    }

}

@Data
 class A{
    private String name;
    private String age;
    private String address;

    public String getPhone() {
        return name+"test";
    }
}

// @Data
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder
@Builder
class B{
    @Getter
    private String name;
    private String age;
    private String phone;

}

Spring框架中的Bean生命周期是指从Bean被创建到销毁的整个过程。在Spring中,Bean的生命周期可以分为以下几个阶段: 1. 实例化:Spring容器使用Bean定义创建Bean实例。 2. 属性赋值:通过Bean定义中的PropertyValues设置对象属性,这些PropertyValues可以是构造参数,也可以是通过setter方法注入的属性。 3. BeanNameAwareBeanFactoryAware:如果Bean实现了BeanNameAware或BeanFactoryAware接口,则Spring容器会调用相应的方法,将Bean自身的ID或Bean工厂实例传递给Bean。 4. BeanPostProcessor的前置处理:在Bean的初始化方法执行之前,Spring容器会调用BeanPostProcessor的postProcessBeforeInitialization方法。 5. 自定义初始化方法:如果Bean定义中指定了初始化方法,则会调用这些方法。这通常是指定init-method属性或者使用InitializingBean接口的afterPropertiesSet方法。 6. BeanPostProcessor的后置处理:在Bean的初始化方法执行之后,Spring容器会调用BeanPostProcessor的postProcessAfterInitialization方法。 7. Bean的作用域:Bean可以是单例的,也可以是原型的,这会影响Bean的生命周期。对于单例Bean,容器会保证它只会被创建一次,并且在容器销毁时也会销毁这个Bean。 8. 容器关闭时的销毁:如果Bean实现了DisposableBean接口或者定义了destroy-method属性,则在Spring容器关闭时,会调用相应的销毁方法。 整个过程是通过Spring的BeanFactory或ApplicationContext容器控制的,容器通过配置元数据定义来管理各种对象及其生命周期。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值