装配 Spring Bean

作者: 善倾 | 来源:发表于2018-09-21 15:35 被阅读1次

    Spring 框架基于控制反转和依赖注入得以实现的自动装配 Bean 对象的功能,关于装配 Bean 对象,掌握下图这 4 个内容就可以了。

    _装配Spring+Bean 1.png

    依赖注入的三种方式

    对象交给 Spring 进行创建了,但是属性如何初始化呢?Spring 初始化 Bean 对象属性有三种方式如下图:

    _依赖注入的三种方式.png

    构造器注入

    使用方式要满足两点:

    • 在 Bean 类中提供对应的构造函数
    public Car(String name, Double price) {
        this.name = name;
        this.price = price;
    }
    
    • 在 XML 文件中进行构造方法属性的配置
    <!-- 属性注入的方式:构造函数注入,(其他类型对象也是可以的哦) -->
    <bean id="car" class="com.itheima.spring.demo4.Car">
        <constructor-arg name="name" value="BMW"/>
        <constructor-arg name="price" value="2383890"/>
    </bean>
    

    使用 setter 注入

    使用方式要满足两点:

    • 在 Bean 类中提供属性和对应的 setter 方法
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    
    • 在 XML 文件中提供属性的配置
    <bean id="userDao" class="com.itheima.spring.demo1.UserDAOImpl">
        <property name="name" value="keqi"></property>
    </bean>
    

    这种方式灵活性更高,通常都是使用这种方式!

    接口注入

    通常都是用这种方式从外界系统中获得资源,Spring 中用的不多。比如 JavaWeb 中的requestresponse内置对象,就是通过接口注入的方式得到的。

    XML 装配 Bean 的方式

    _XML装配Bean.png

    Bean 类的配置

    <bean id="userDao" class="packageName.UserDAOImpl">
    </bean>
    

    普通属性的配置

    基本数据类型和 String 类型的字符串都是这样配置的

    <bean id="userDao" class="packageName.UserDAOImpl">
        <property name="name" value="keqi"/>
    </bean>
    

    其他类型的对象

    其他类型的对象要用ref属性指定,值就是其他 Bean 对象的id属性。

    <bean id="employee" class="packageName.Employee">
        <property name="name" value="keqi"/>
        <!-- 引用其他对象,用ref引用就可以了哦 -->
        <property name="car2" ref="car2"/>
    </bean>
    

    集合属性的配置

    如果某个属性是集合类型的,只要在property属性下加上对应集合类型的标签即可。

    • List 集合&数组集合
    <property name="list">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </list>
    </property>
    
    • Map 集合
    <property name="map">
        <map>
            <entry key="aaa" value="111"/>
            <entry key="bbb" value="222"/>
            <entry key="ccc" value="333"/>
        </map>
    </property>
    
    • Set 集合
    <property name="set">
        <set>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </set>
    </property>
    

    Bean生命周期&作用范围的配置

    指定生命周期的方法和类对象的作用范围如下

    <bean id="customerDAO" class="packageName.CustomerDAOImpl"
        init-method="setup" destroy-method="destroy"
        scope="prototype">
    </bean>
    

    注解配置 Bean 的方式

    Spring 开发中通常都是用的注解来配置 Bean 类的,这种方式开发更快捷。


    _注解配置Bean.png

    Bean 类的注解

    表示一个类交给 Spring 进行管理用的是@Component注解。但是通常用的是它衍生初的另外三个注解,这样看到注解就能够知道这个类在三层架构中处于什么位置。

    • @Controller,表示 web 层的类
    • @Service,表示 service 层的类
    • @Repository,表示 dao 层的类

    Bean 属性的注解

    Bean 类的属性分为普通属性和对象类型的属性。记住下面两个注解就可以了:

    • @Value,表示普通属性的注解
    • @Resource,表示对象类型的注解

    Bean 生命周期的注解

    因为 Bean 对象是由 Spring 进行管理的,所以它和 Servlet 类一样,也有所谓的生命周期方法。

    一个是初始化方法,Bean 对象创建后立即执行此方法,另一个是销毁方法,Bean 对象销毁之前会执行此方法。分别使用以下两个注解来描述对应的方法:

    • @PostCOnstruct,描述初始化方法
    • @PreDestroy,描述销毁方法

    Bean 作用范围的注解

    Bean 对象是有作用范围概念的,在 WEB 应用中,Bean 对象可以作为request或者session内置对象的属性存在。同时还需要指定它创建的方式,是保证单例创建,还是多例创建。用@Scope属性来描述类,他有以下 4 个属性:

    • singleton,表示单例创建该对象
    • prototype,表示多例创建该对象
    • request,表示该类作为属性存放在此对象中,每次请求一个对象
    • session,表示该类作为属性存放在此对象中,一次会话一个对象

    XML&注解混合配置Bean

    注解开发快速,后期不好维护,XML 后期好维护,开发繁琐。所以通常也会结合他们的优点,两者混合使用来配置 Bean 。原则就是,类用 XML 描述,属性用注解描述。

    相关文章

      网友评论

        本文标题:装配 Spring Bean

        本文链接:https://www.haomeiwen.com/subject/brzanftx.html