首页 > 其他分享 >springframework中关于bean的装配方式、初始化、实例化流程

springframework中关于bean的装配方式、初始化、实例化流程

时间:2023-09-19 23:37:20浏览次数:33  
标签:初始化 标签 springframework bean 实例 加载 方法 注入

● bean的配置方式? ○ xml文件配置 ○ bean的配置范围(scope范围) ○ bean的延迟加载(applicationContext是立即加载,如果需要延迟加载设置lazy-init为true,在getBean的时候才进行加载,加载实例化完了之后回存储到单例池中去,后续使用该bean直接从单例池中获取即可,本质上该bean还是单例的) ○ bean的初始化方法和销毁方法怎么指定?这里的destoryMethod的bean的销毁和容器的销毁并不是一回事,有时候对象不执行销毁方法可能是spring的容器先挂了,这时候来不及执行destory方法。 ● 关于对象创建完毕之后想要做一些初始化工作,可以有两个方法:一个是可以写个方法,在bean的配置时候指定该方法为initMethod是谁;第二个就是这个实例implements接口InitializingBean去复写里面的afterPropertiesSet�来进行初始化逻辑 ● bean的实例化是怎么做的?一种是通过构造方式(构造方法对bean实例化),一种是工厂方式(通过自定义的工厂对bean进行实例化) ○ 无参构造 ○ 有参构造 ○ 注意这里要是只有有参构造没有无参构造,会有问题解决的方法可以是在配置类里面加上constructor-arg�参数 ● 工厂方式实例化bean是怎么做的? ○ 静态工厂的静态方法的方式进行实例化bean ■ 配置内容如下:这里面的factory-method就相当于是指定“userDao”这个方法,把这个方法的返回值作为value对象,再以指定的beanId作为beanName作为对象key存储到map中 <bean id="userDao1" class="com.autonavi.xmap.springLearning.factory.MyBeanFactory1" factory-method="userDao"></bean> 伪代码

public class MyBeanFactory1 {
    public static UserDao userDao(){
        // bean创建之前可以进行一些其他业务逻辑操作
        return new UserDaoImpl();
    }
}

○ 实例工厂内部的方法是非静态的,用这个方法来实例化bean ■ 配置内容如下: <!--配置工厂对象-->

<bean id="myBeanFactory2" class="com.autonavi.xmap.springLearning.factory.MyBeanFactory2" ></bean>
 <bean id="userDao2" factory-bean="myBeanFactory2" factory-method="userDao"></bean>

○ 实现FactoryBean规范延迟实例化bean(它不是马上创建,在用的时候才创建)看下FactoryBean里面就能看到实际上工作的只有3个方法:getObject返回对象、getObjectType返回类型、isSingleton是否单例

● bean的注入方式 ○ 通过set方法进行注入 ■ 注入的是普通属性:用value就行(string、int) ■ 注入的是对象引用:通过ref进行注入(Reference) ○ 通过构造Bean的方法进行注入 ■ 普通属性 ■ 对象引用 ● bean依赖注入的数据类型 ○ 普通数据类型:string、int、boolean等,通过value属性指定 ○ 引用数据类型(容器中1个bean注入另外1个bean):UserDaoImpl、DataSource等,通过ref属性指定 ○ 集合数据类型:List、Map、Properties等 ○ 举一些例子

<bean id="userService" class="com.autonavi.xmap.springLearning.service.impl.UserServiceImpl">
        <property name="stringList">
           <list>
               <value>aaa</value>
               <value>bbb</value>
               <value>ccc</value>
           </list>
        </property>
        <property name="userDaoList">
            <list>
                <bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
                <bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
                <bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
            </list>
        </property>
        <property name="userDaoList">
            <list>
                <ref bean="userDao1"></ref>
                <ref bean="userDao2"></ref>
                <ref bean="userDao3"></ref>
            </list>
        </property>
        <property name="stringSet">
            <set>
                <value>xxx</value>
                <value>yyy</value>
                <value>zzz</value>
            </set>
        </property>
        <property name="userDaoSet">
            <set>
                <ref bean="userDao1"></ref>
                <ref bean="userDao2"></ref>
                <ref bean="userDao3"></ref>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="keyTest1" value-ref="userDao1">
                </entry>
                <entry key="keyTest2" value-ref="userDao2">
                </entry>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="p1"> ppp1 </prop>
                <prop key="p2"> ppp2 </prop>
            </props>
        </property>
    </bean>
    <bean id="userDao1" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
    <bean id="userDao2" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
    <bean id="userDao3" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>

● bean的自动装配 ○ byName(byname的注意点就是name要对上,并且name不要重复) ○ byType(byType的注意点就是根据type要只能找到一个,不能有多个(唯一匹配性问题),否则爆出有NoUniqueBeanDefinitionException异常,会提示expected single matching bean but found 2: userDao,userDao2 ● bean的其他配置标签 ○ spring的xml标签大体上分为两类,一种是默认标签,一种是自定义标签 ■ 默认标签:就是不用额外导入其他命名空间约束的标签,例如<bean>标签,总共4个默认标签; ● beans:profile进行属性区分 ■ 自定义标签:就是需要额外引入其他命名空间约束,并通过前缀引用的标签,例如 context:property-placeholder/ 这样的标签

标签:初始化,标签,springframework,bean,实例,加载,方法,注入
From: https://blog.51cto.com/u_15927490/7530032

相关文章

  • ibatis报net.sf.cglib.beans.BulkBeanException异常
    现象:错误原因分析:因为查询出来的sql中有几个字段查出来的值是为空 is_public,is_member_valid,is_admin_validmodel类中有几个属性 /*公开标志*/ privateintis_public; /*会员启用标志*/ privateintis_member_valid; /*管理员启用标志*/ privateintis_admin_val......
  • Spring Bean生命周期
    概述Spring的ioc容器功能非常强大,负责Spring的Bean的创建和管理等功能。而Spring的bean是整个Spring应用中很重要的一部分,了解SpringBean的生命周期对我们了解整个spring框架会有很大的帮助。BeanFactory和ApplicationContext是Spring两种很重要的容器,前者提供了最基本的依赖注......
  • spring中 beandefinition类中的6大属性
    什么是BeanDefinition?BeanDefinition表示bean的定义,spring根据 beandefinition用来创建bean对象,他有很多属性来描述bean。1.beanClass:表示一个bean的类型,比如UserService.class,在创建bean的过程中会根据此属性来实例化得到的对象。2.scope:表示一个bean的作用域,比如......
  • centos7初始化脚本
    #!/bin/bash#initcentos7./centos7-init.sh主机名#检查是否为root用户,脚本必须在root权限下运行if[["$(whoami)"!="root"]];thenecho"pleaserunthisscriptasroot!">&2exit1fiecho-e"\033[31mthescriptonly......
  • KingbaseES V8R6集群备份恢复案例之---备份初始化“can not find primary node”故障
    案例说明:KingbaseESV8R6集群,备库作为repo-path节点,建立类型为‘cluster’模式的备份,在执行sys_backup.shinit时,出现“cannotfindprimarynode”故障。故障如下图所示:适用版本:KingbaseESV8R6一、集群及备份配置1、集群节点状态[kingbase@node101bin]$./repmgrclus......
  • Spring源码分析(一)Spring容器及Spring Bean
    (一)Spring容器及SpringBean1.Spring容器1.1什么是容器官网中有一句话Theorg.springframework.context.ApplicationContextinterfacerepresentstheSpringIoCcontainerandisresponsibleforinstantiating,configuring,andassemblingthebeans.翻译下来的意思是:Spr......
  • JavaScript 创建并初始化任意长度的数组
    直接定义vararr=[0,0,0,0,0];//[0,0,0,0,0]使用push()方法vararr=[];for(leti=0;i<5;i++){arr.push(0);}//[0,0,0,0,0]使用Array构造函数和fill()方法vararr=newArray(5);//[empty×5]arr.fill(0);//[0......
  • 数据库初始化
    数据库初始化 1-配置用户1.1创建组groupaddyw1.2创建用户useradd-d/home/yw-gywyw1.3修改用户密码passwdyw1.4查看是否存在cat/etc/passwd|grepyw 2-数据库初始化2.1登录Oracle服务器,切换到oracle用户su-oracle2.2创建临时目录mkdir/home/oracle/tem......
  • springbean生命周期
    B站连接https://www.bilibili.com/video/BV12a411r75X/?spm_id_from=333.337.search-card.all.click&vd_source=f0f7ef36d638628b3ab7a240c872017dSpringBean的生命周期大致上分为五个阶段:创建前准备:Bean在开始加载之前要从上下文和一些配置中去解析并且查找Bean有关扩展的实现,......
  • HashMap 的初始化问题
    最近的两次面试被分别被问到了:如果初始化HashMap的容量为100,那么实际容量会是多少?如果初始化HashMap的容量为20,那么实际容量会是多少?会不会发生扩容?自己想当然的会回答:容量会是满足2的幂次*负载因子>=初始化指定容量的值publicstaticvoidmain(String[]arg......