Spring从入门到进阶 --Spring的Bean管理

写的非常详细(慕课网笔记):

Spring的Bean管理: https://blog.csdn.net/weixin_41963657/article/details/90209827

Spring的属性注入:https://blog.csdn.net/weixin_41963657/article/details/90208653
Spring Bean管理——XML方式 -------------------------------->Spring Bean管理——注解方式
在这里插入图片描述

使用xml配bean

三种实例化Bean的方式:

*使用类构造器实例化(默认无参数)
*使用静态工厂方法实例化(简单工厂模式)
*使用实例工厂方法实例化(工厂方法模式)

一般情况下采用第一种方式,当构造比较复杂时采用二三种方法

  • 1.无参实例化:
    配置id、类
  • 2.静态工厂实例化:
    创建工厂方法,配置id、工厂类、工厂方法(factory-method属性)
  • 3.实力工厂实例化:
    没有静态方法
    配置两个bean
    一个配置id、工厂类
    一个配置id、工厂id(factory-bean属性)、工厂类方法(factory-method属性)
 <!--Bean的实例化的三种方式============================-->
    <!--第一种:无参构造器的方式-->
    <!--<bean id="bean1" class="com.imooc.ioc.demo2.Bean1"/>-->
    <!--第二种:静态工厂的方式-->
    <!--<bean id="bean2" class="com.imooc.ioc.demo2.Bean2Factory" factory-method="createBean2"/>-->
    <!--第三种:实例工厂的方式-->
    <!--<bean id="bean3Factory" class="com.imooc.ioc.demo2.Bean3Factory"/>
    <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>-->

    <!--Bean的作用范围=====================================-->
    <!--<bean id="person" class="com.imooc.ioc.demo3.Person" scope="prototype"/>-->

   <!-- <bean id="man" class="com.imooc.ioc.demo3.Man" init-method="setup" destroy-method="teardown">
        <property name="name" value="张三"/>
    </bean>-->
<!--    <bean class="com.imooc.ioc.demo3.MyBeanPostProcessor"/>

    <bean id="userDao" class="com.imooc.ioc.demo3.UserDaoImpl"/>-->

    <!--Bean的构造方法的属性注入=============================-->
<!--    <bean id="user" class="com.imooc.ioc.demo4.User">
        <constructor-arg name="name" value="张三" />
        <constructor-arg name="age" value="23"/>
    </bean>-->

    <!--Bean的set方法的属性注入==============================-->
<!--    <bean id="person" class="com.imooc.ioc.demo4.Person">
        <property name="name" value="李四"/>
        <property name="age" value="32"/>
        <property name="cat" ref="cat"/>
    </bean>

    <bean id="cat" class="com.imooc.ioc.demo4.Cat">
        <property name="name" value="ketty"/>
    </bean>-->

Spring的属性注入(DI)

  • DI的3种方式
    构造函数——Spring支持
    在元素里声明属性
    属性setter——Spring支持
    接口注入
    开发中一般使用setter方法注入
    在这里插入图片描述
    <!--Bean的构造方法的属性注入=============================-->
<!--    <bean id="user" class="com.imooc.ioc.demo4.User">
        <constructor-arg name="name" value="张三" />
        <constructor-arg name="age" value="23"/>
    </bean>-->

    <!--Bean的setter方法的属性注入==============================-->
<!--    <bean id="person" class="com.imooc.ioc.demo4.Person">
        <property name="name" value="李四"/>
        <property name="age" value="32"/>
        <property name="cat" ref="cat"/>
    </bean>
  • p名称空间注入
    在这里插入图片描述
<!--Bean的p名称空间的属性注入==============================-->
    <bean id="person" class="com.imooc.ioc.demo4.Person" p:name="大黄" p:age="34" p:cat-ref="cat"/>

    <bean id="cat" class="com.imooc.ioc.demo4.Cat" p:name="小黄"/>
  • SpEL的属性注入((注入的属性较为复杂时使用))

在这里插入图片描述

   <!--Bean的SpEL的属性注入==============================-->
    <bean id="category" class="com.imooc.ioc.demo4.Category">
        <property name="name" value="#{'服装'}"/>
    </bean>

    <bean id="productInfo" class="com.imooc.ioc.demo4.ProductInfo"/>

    <bean id="product" class="com.imooc.ioc.demo4.Product">
        <property name="name" value="#{'男装'}"/>
        <property name="price" value="#{productInfo.calculatePrice()}"/>
        <property name="category" value="#{category}"/>
    </bean>

复杂属相的注入

在这里插入图片描述

package com.imooc.ioc.demo5;

import java.util.*;

public class CollectionBean {
    private String[] arrs; // 数组类型

    private List<String> list;// List集合类型

    private Set<String> set; // Set集合类型

    private Map<String,Integer> map;// Map集合类型

    private Properties properties; // 属性类型

	//省略get/set
    }
}

<!--集合类型的属性注入=================================-->
    <bean id="collectionBean" class="com.imooc.ioc.demo5.CollectionBean">
        <!--数组类型-->
        <property name="arrs">
            <list>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </list>
        </property>
        <!--List集合的属性注入-->
        <property name="list">
            <list>
                <value>111</value>
                <value>222</value>
                <value>333</value>
            </list>
        </property>
        <!--Set集合的属性注入-->
        <property name="set">
            <set>
                <value>ddd</value>
                <value>eee</value>
                <value>fff</value>
            </set>
        </property>
        <!--Map集合的属性注入-->
        <property name="map">
            <map>
                <entry key="aaa" value="111"/>
                <entry key="bbb" value="222"/>
                <entry key="ccc" value="333"/>
            </map>
        </property>
        <!--Properties的属性注入-->
        <property name="properties">
            <props>
                <prop key="username">root</prop>
                <prop key="password">1234</prop>
            </props>
        </property>

Spring的Bean管理(注解)方式(使用注解定义Bean)

全局扫描:
<context:component-scan base-package=“包名”/>

使用注解定义Bean
*Spring2.5引入使用注解去定义Bean
@Component 描述Spring框架中Bean
*除了@Component外,Spring提供了3个基本和@Component等效的注解
-@Repository 用于对DAO实现类进行标注
-@Service 用于对Service实现类进行标注
-@Controller 用于对Controller实现类进行标注
*这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强
在这里插入图片描述

属相注入

Spring的属性注入-注解方式
*使用@Autowired进行自动注入
*@Autowired 默认按照类型进行注入

  • 如果存在两个相同Bean类型相同,则按照名称注入
    *Autowired注入时可以针对成员变量或者set方法
    *通过@Autowired的required属性,设置一定要找到匹配的Bean
    *使用@Qualifier指定注入Bean的名称

Spring提供对JSR-250中定义@Resource标准注解的支持
@Resource和@Autowired注解功能相似,默认按照名称注入

在这里插入图片描述

Spring的其他注解

Spring初始化bean或者销毁bean时,有时需要做一些处理,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法。
在这里插入图片描述

传统XML配置和注解配置混合使用

*XML方式的优势
-结构清晰,易于阅读
*注解方式的优势
-开发便捷,属性注入方便
*XML与注解的整合开发
-1、引入context命名空间
-2、在配置文件中添加context:annotation-config标签

<context:component-scan base-package="…"> 包中所有的注解都被解析
context:annotation-config 只解析属性的注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值