Spring学习-----bean的装配(5)

上一节中我们了解了bean对于集合的装配,可以看到,还是很简单的,总是总结这样的知识点,瞬时间自信心爆棚啊!好,下面我们来总结又一个简单的知识点,继承配置和通过构造函数来配置bean。

  • 通过继承来配置bean
    school.java

    package rogue.inherit;
    public class School {
    private String name;
    private String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
    
    }
    

    Student.java

    package rogue.inherit;      
    public class Student extends School{
    private String stuName;
    private int age;
    
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    }
    

    beans.xml

    <bean id="school" class="rogue.inherit.School">
            <property name="name" value="高水中学"/>
            <property name="address" value="大阪"/>   
    </bean>
    <bean id="student" parent ="school" class="rogue.inherit.Student">
        <property name="stuName" value="王小明"/>
        <property name="age" value="10"/>   
    </bean>
    

    测试程序:

    public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("rogue/inherit/beans.xml");
            Student student = (Student) ac.getBean("student");
            System.out.println(student.getStuName()+"是"+student.getAge()+"岁的学生,他的学校位于"+student.getAddress());
            }
    

以上,我们都是利用set方式给bean注入值的,Spring还提供了通过构造函数给bean注入值,下面我们来说一下。
还以上面的Student.java为例,在beans.xml做如下配置

<bean id="student2" class="rogue.inherit.Student">
    <constructor-arg index="0" type="java.lang.String" value="小樱">
    <constructor-arg index="1" type="int" value="10">
</bean>

这样,我们就得到了一个实例对象。当然,前提是在Student.java 里面必须有这样有两个参数的构造函数才可以成功。


通过以上的讲解,我们大体上了解了利用set和构造函数来配置bean的方式。set注入的缺点是无法清晰表达哪些属性是必须的,哪些属性是可选的。比如说,student这个bean中有age、name、address三个属性,我用set的方式可以配置这三个中的任意几个,这样就导致了如果我们需要配置两个属性但是实际上却只配置了一个,这样也不会报错。构造函数注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean。就是说,有什么样的构造函数就必须只能那样配置,参数个数和类型必须要匹配。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot的自动装配原理是通过扫描外部引用jar包中的META-INF/spring.factories文件来加载配置信息,并将配置的类型信息加载到Spring容器中,并执行相应的操作。\[1\]在SpringBoot中,我们只需引入对应的starter依赖,就可以自动完成对第三方依赖的配置操作,无需手动编写特定的bean。\[1\] 具体实现原理是通过在resources目录下创建一个spring.factories文件,文件中配置了需要自动装配的类的全限定名,使用@EnableAutoConfiguration注解来启用自动装配。\[2\]在SpringBoot的主启动类上使用@SpringBootApplication注解,该注解包含了@SpringBootConfiguration、@ComponentScan和@EnableAutoConfiguration三个注解。其中@SpringBootConfiguration注解表示该类是SpringBoot的配置类,@ComponentScan注解用于扫描被@Component注解的bean,@EnableAutoConfiguration注解是自动装配的核心注解。\[3\] 总结起来,SpringBoot的自动装配原理是通过扫描外部引用jar包中的配置文件,加载配置信息,并根据配置信息自动完成对第三方依赖的配置操作,简化了开发者的配置工作。 #### 引用[.reference_title] - *1* *2* *3* [Springboot的自动装配原理](https://blog.csdn.net/weixin_43324905/article/details/123949084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值