栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

Bean创建的生命周期

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Bean创建的生命周期

一、Bean创建的过程

UserServer.class--->无参构造方法(推断构造方法,判断传的值是什么)--->普通对象--->依赖注入(属性赋值)--->初始化前(@PostConstruct)--->初始化(InitializingBean接口)--->初始化后(AOP)--->(代理对象)--->Bean

先将.class文件编译成.java文件,调用类的无参构造方法或者根据有@Autowired注解的构造方法先创建一个对象,然后找到当前文件里面所有的字段进行遍历,看字段是否包含@Autowired依赖注入注解,如果有就进行调用里面的方法,初始化前把当前类里面所有方法进行一个遍历,判断方法上是否加入了@PostConstruct注解,如果有执行当前对象的方法,如果有参就传参,没有就不传,初始化时会判断该类是否实现InitializingBean接口,如果实现了InitializingBean接口,就去找里面重写的afterPropertiesSet方法,运行该方法,初始化后首先找出所有的切面Bean,然后进行遍历,遍历其中的方法,判断跟该类有关的方法放入缓存中,在执行切面的时候就可以直接拿出来,AOP之后生成代理对象(JDK动态代理和CGLIB动态代理),最后生成bean。

for (Field field : car.getClass().getFields()) {

        //判断某个字段上面是否存在这个注解 @Autowired isAnnotationPresent判断注解

        if (field.isAnnotationPresent(Autowired.class)) {

                //如果有@Autowired执行当前方法

                //如果存在就给当前这个对象的当前这个属性去赋值

                field.set(car,???);

        }

}

for (Method method : car.getClass().getMethods()) {

        if(method.isAnnotationPresent(PostConstruct.class)){

                //如果有执行当前对象的方法,如果有参就传参,没有就不传

                method.invoke(car,???)

        }

}

@PostConstruct

public People a(){

        //初始化前

        //从mysql中查询出admin信息赋值给People对象再传给admin

        //mysql--->People--->admin

        return new People();

        }

}

for(userService instanceof InitializingBean){

}

@Override

public void afterPropertiesSet() throws Exception {

        //初始化

        //afterPropertiesSet 属性设置后

        //从mysql中查询出admin信息赋值给People对象再传给admin

        //mysql--->People--->admin

}

spring内部先根据类型去容器里面找bean对象,如果只找到一个,就会把找到的bean对象直接拿来使用,如果找到多个bean对象,再根据名字去找,找到拿来直接用,没有找到就报错

public UserService (OrderService orderService){

        // Map

        this.orderService = orderService;

}

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号