Spring依赖注入bean属性、手动装配使用xml配置、SpEL表达式、集合List、Set、Map、Properties注入、数组注入、注解注入-day02

第一节 Spring依赖注入Bean属性(xml)

1.1 手动装配,使用xml配置

1. 通过构造方法注入

  1. 写一个Student类,提供get/set、toString、无参构造、2种不同的有参构造
    在这里插入图片描述
  2. beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--通过构造方法注入属性的值-->
    <!--<bean class="com.it.model.Student" id="student">
        &lt;!&ndash;这样写就调用的是2个string的构造方法&ndash;&gt;
        <constructor-arg name="username" value="shu"></constructor-arg>
        <constructor-arg name="password" value="123"></constructor-arg>
    </bean>-->

    <!--<bean class="com.it.model.Student" id="student">
        &lt;!&ndash;这样写就调用的是一个string 一个是int 的构造方法&ndash;&gt;
        <constructor-arg name="username" value="shu"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
    </bean>-->

    <bean class="com.it.model.Student" id="student">
        <!--还可以通过索引加类型,给构造方法赋值-->
        <constructor-arg index="0" value="shu" type="java.lang.String"></constructor-arg>
        <constructor-arg index="1" value="18" type="int"></constructor-arg>
    </bean>

</beans>
  1. 效果
    在这里插入图片描述

2. 通过属性的setter方法注入

  • setter方法有两种注入,一般使用第一种直观
  1. beans1.xml
    在这里插入图片描述
  2. 效果
    在这里插入图片描述

3. 通过p命名空间注入【了解】

  • 使用这种方法的类,必须要给属性提供get/set方法,否则报错
  1. beans2.xml
    在这里插入图片描述
  2. 效果
    在这里插入图片描述

1.2 SpEL表达式【了解】

  • SpEL:Spring 表达式
  • 对<property>进行统一编程,所有的内容都使用value。
  • <property name="" value="#{表达式}">
    #{123}、#{‘jack’} : 数字、字符串
    #{beanId} :另一个bean引用
    #{beanId.propName} :操作数据
    #{beanId.toString()} :执行方法
    #{T(类).字段|方法} :静态方法或字段

演示

  1. 提供Address属性的get/set方法、重写toString
    在这里插入图片描述
  2. 提供Customer属性的get/set方法、重写toString(toString无需包含地址)
    在这里插入图片描述
  3. beans3.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--SpEL:spring表达式
      <property name="" value="#{表达式}">
          #{123}、#{'jack'} : 数字、字符串
          #{beanId}	:另一个bean引用
          #{beanId.propName}	:操作数据
          #{beanId.toString()}	:执行方法
          #{T(类).字段|方法}	:静态方法或字段
    -->
    <!--创建一个地址对象-->
    <bean class="com.it.model.Address" id="address">
        <property name="name" value="北京"></property>
    </bean>

    <bean class="com.it.model.Customer" id="customer">
        <!--<property name="name" value="shu"></property>-->
        <!--这样写的好处是能调用方法-->
        <property name="name" value="#{'shu'.toUpperCase()}"></property>

        <!--还可以将address.name 地址名赋值给客户名(操作数据的一种写法)-->
        <!--<property name="name" value="#{address.name}"></property>-->

        <!--<property name="pi" value="3.14"></property>-->
        <!--调用静态方法 Math.PI-->
        <property name="pi" value="#{T(java.lang.Math).PI}"></property>

        <!--一个对象引用另外一个对象的两种写法:-->
        <!--1.ref引用-->
        <!--<property name="address" ref="address"></property>-->
        <!--2.使用spel 在Customer中引用了另外一个(Address)bean-->
        <property name="address" value="#{address}"></property>

    </bean>

</beans>
  1. 效果
    在这里插入图片描述

1.3 集合注入

  • 集合的注入都是给<property>添加子标签
  • 数组:<array>
    List:<list>
    Set:<set>
    Map:<map> ,map存放k/v 键值对,使用<entry>描述
    Properties:<props> <prop key=" "></prop> </props>
  • 普通数据:<value>
  • 引用数据:<ref>

List、Set、Map、Properties、数组

  1. 写个Programmer程序员类,提供以下集合与数组的get/set方法
    在这里插入图片描述
  2. beans4.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--通过bean集合注入-->
    <bean class="com.it.model.Programmer" id="programmer">
        <property name="cars">
            <!--list集合的注入-->
            <list>
                <value>奔驰</value>
                <value>宝马</value>
                <value>ofo</value>
            </list>
        </property>

        <property name="pats">
            <!--set集合的注入-->
            <set>
                <value>大黄</value>
                <value>哈士奇</value>
                <value>蓝猫</value>
            </set>
        </property>

        <property name="infos">
            <!--map集合的注入-->
            <map>
                <entry key="name" value="shu"></entry>
                <entry key="password" value="123"></entry>
                <entry key="age" value="18"></entry>
            </map>
        </property>

        <property name="mysqlInfos">
            <!--properties的注入-->
            <props>
                <prop key="url">mysql:jdbc://localhost:3306/spring_day02</prop>
                <prop key="username">root</prop>
                <prop key="password">root</prop>
            </props>
        </property>

        <property name="members">
            <!--数组注入-->
            <array>
                <value>father</value>
                <value>mother</value>
                <value>sister</value>
            </array>
        </property>
    </bean>

</beans>
  1. 效果
    在这里插入图片描述

1.4 注解注入

  • 注解:就是一个类使用@注解名称
    开发中:使用注解 取代 xml配置文件

@Component使用案例

  • @component取代:<bean class="">
  1. 在UserServiceImpl上添加一个@Component
    在这里插入图片描述
  2. beans5.xml配置,使用这种方法需要开启注解和配置注解扫描的位置
    在这里插入图片描述
  3. 使用与效果(成功注入值)
    在这里插入图片描述

@Component(“id”)使用案例

  • @Component(“id”)取代: <bean id="" class="">
  1. 在UserServiceImpl上添加一个@Component(“userService”)
    在这里插入图片描述
  2. beans5.xml配置同上,开启注解和配置注解位置即可
  3. 使用与效果(值同样注入成功)
    在这里插入图片描述

未使用注解的web-service-dao配置

  1. dao实现类(简单的使用,暂不使用数据库)
    在这里插入图片描述
  2. service实现类(userDao通过spring赋值)
    在这里插入图片描述
  3. web-action的使用(userService通过spring赋值)
    在这里插入图片描述
  4. beans6.xml配置
    在这里插入图片描述
  5. 使用与效果
    在这里插入图片描述

使用注解的web-service-dao配置

  • web开发,提供3个@Component注解衍生注解(功能一样)取代<bean class="">
    @Repository(“名称”):dao层
    @Service(“名称”):service层
    @Controller(“名称”):web层


    @Autowired:自动根据类型注入
    @Qualifier(“名称”):指定自动注入的id名称
    @Resource(name=“名称”):@Autowired与@Qualifier(“名称”)的结合


    @Scope(“prototype”):多例,默认是单列singleton


    @ PostConstruct 自定义初始化
    @ PreDestroy 自定义销毁
  1. 在dao实现类上使用@Repository注解
    在这里插入图片描述
  2. 在service实现类上使用@Service注解,在userDao上使用@Autowired自动根据类型注入
    在这里插入图片描述
  3. 在UserAction上使用@Controller注解,表示web层
    在这里插入图片描述
  4. beans7.xml配置,只需开启注解与配置扫描注解即可
    在这里插入图片描述
  5. 效果相同,使用方便、快捷
    在这里插入图片描述
  6. @Qualifier(“名称”)的使用(指定自动注入的id名称)
    UserAction中:
    在这里插入图片描述UserServiceImpl中:
    在这里插入图片描述
  7. @Resource(name=“名称”)的使用
    在这里插入图片描述
  8. @Scope(“prototype”)(多例,默认是单列singleton)的使用
    不配置,默认是单列的,从spring容器中获取UserAction类的对象,是同一个
    在这里插入图片描述
    配置后,是多例的,每次获取都会返回一个新的对象
    在这里插入图片描述
    在这里插入图片描述
    相当于之前在beans.xml中配置的单列、多例
    在这里插入图片描述
  9. @ PostConstruct 自定义初始化与@ PreDestroy 自定义销毁的使用
    在UserDao的实现类中配置:
    在这里插入图片描述
    注意要使用context调用关闭容器close的方法,才会执行自定义销毁方法 在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值