Spring之 IOC XML配置(四)

    科技2023-10-22  80

    Spring之 IOC XML配置(四)

    一、配置参数1.曾经XML的配置2.用于创建对象的3.用于注入数据1.Autowired2.Qualifier3.Resource4. Value 3.用于改变作用范围4.和生命周期相关(了解)二、代码实现 三、Spring 注解和 XML 的选择问题1.注解的优势:2.XML 的优势:3.Spring 管理 Bean 方式的比较:

    一、配置参数

    1.曾经XML的配置

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="" init-method="" destroy-method=""> <property name="" value="" | ref=""></property> </bean>

    2.用于创建对象的

      他们的作用就和在XML配置文件中编写一个标签实现的功能是一样的

    Component:

    作用: 用于把当前类对象存入spring容器中属性: value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。Controller:一般用在表现层Service:一般用在业务层Repository:一般用在持久层

      以上三个注解他们的作用和属性与Component是一模一样。他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

    3.用于注入数据

      他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的

    1.Autowired

    作用: 自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功注意: 1. 如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。 2. 如果Ioc容器中有多个类型匹配时:出现位置: 可以是变量上,也可以是方法上细节: 在使用注解注入时,set方法就不是必须的了。

    2.Qualifier

    作用: 在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用,但是在给方法参数注入时可以。属性: value:用于指定注入bean的id。

    3.Resource

    作用: 直接按照bean的id注入。它可以独立使用属性: name:用于指定bean的id。 以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。注意: 集合类型的注入只能通过XML来实现。以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。

    4. Value

    作用: 用于注入基本类型和String类型的数据属性: value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)SpEL的写法:${表达式}

    3.用于改变作用范围

      他们的作用就和在bean标签中使用scope属性实现的功能是一样的

    Scope 作用: 用于指定bean的作用范围属性: value:指定范围的取值。常用取值:singleton prototype

    4.和生命周期相关(了解)

      他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的

    PreDestroy: 用于指定销毁方法PostConstruct: 用于指定初始化方法

    二、代码实现

    bean.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--告知spring在创建容器时要扫描的包,配置所需要的标签不是在beans的约束中,而是一个名称为context名称空间和约束中--> <context:component-scan base-package="com.hzuxy"></context:component-scan> </beans>

    AccountDaoImpl.java

    package com.hzuxy.dao.impl; import com.hzuxy.dao.IAccountDao; import org.springframework.stereotype.Repository; import javax.annotation.Resource; /** * 账户的持久层实现类 */ @Repository("accountDao") public class AccountDaoImpl implements IAccountDao { @Resource(name = "accountDao2") private IAccountDao accountDao = null; public void saveAccount(){ System.out.println("保存了账户"); } }

    AccountServiceImpl.java

    package com.hzuxy.service.impl; import com.hzuxy.service.IAccountService; import org.springframework.stereotype.Service; import java.util.Date; @Service("accountService") public class AccountServiceImpl implements IAccountService { public void saveAccount() { } }

    三、Spring 注解和 XML 的选择问题

    1.注解的优势:

      配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。

    2.XML 的优势:

      修改时,不用改源码。不涉及重新编译和部署。

    3.Spring 管理 Bean 方式的比较:

    基于XML配置基于注解配置Bean定义<bean id="…" class="…" / >@Component @Respository @Service @ControllerBean名称通过id或name指定@Component(“person”)Bean注入或者通过p命名空间@Autowired 按类型注入 @Qualifier 按名称注入生命过程、Bean定义作用范围init-method desttoy-method 范围 scope属性@PostConstruct 初始化 @PreDestroy 销毁 @Scope 设置作用范围适合场景bean来自第三方,使用其他Bean实现类由用户自己开发
    Processed: 0.034, SQL: 8