企业级框架Spring——学习总结之阶段2

        接过上一讲,我们接着讲述DI依赖注入 (依赖注入描述了在容器中建立bean与bean之间的依赖关系的过程)        

        1.DI依赖注入


        向一个类中传递数据的方式有几种?

  •         普通方法(set方法)
  •         构造方法

        1 setter注入:

                对于setter方式注入引用类型的方式之前已经学习过,快速回顾下:

                1.在bean中定义引用类型属性,并提供可访问的set方法

public void setBookDao(BookDao bookDao) {
    this.bookDao = bookDao;
 }

                2.配置中使用property标签ref属性注入引用类型对象

<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.imipl.BookDaoImpl"/>

                3.编写AppForDISet运行类,加载Spring的IOC容器,并从中获取对应的bean对象

public class AppForDISet {
  public static void main( String[] args ) {
    ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
    BookService bookService = (BookService) ctx.getBean("bookService");
    bookService.save();
 }
}

   2 注入简单数据类型

思考:
        引用类型使用的是 <property name="" ref=""/> ,简单数据类型还是使用ref么?
        ref是指向Spring的IOC容器中的另一个bean对象的,对于简单数据类型,没有对应的bean对象,该如何配置?

        步骤1:声明属性并提供setter方法

                在BookDaoImpl类中声明对应的简单数据类型的属性,并提供对应的setter方法

private String databaseName;
private int connectionNum;

public void setConnectionNum(int connectionNum) {
    this.connectionNum = connectionNum;
 }
  public void setDatabaseName(String databaseName) {
    this.databaseName = databaseName;
 }

public void save() {
    System.out.println("book dao save..."+databaseName+","+connectionNum);
 }

        步骤2:配置文件中进行注入配置

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
    <property name="databaseName" value="mysql"/>
  <property name="connectionNum" value="10"/>
  </bean>
  <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
  <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
    <property name="bookDao" ref="bookDao"/>
    <property name="userDao" ref="userDao"/>
  </bean>
 <property name="databaseName" value="mysql"/>
  <property name="connectionNum" value="10"/>

value:后面跟的是简单数据类型,对于参数类型,Spring在注入的时候会自动转换

        2 构造器注入

        步骤1:删除setter方法并提供构造方法
                在BookServiceImpl类中将bookDao的setter方法删除掉,并添加带有bookDao参数的构造方法


public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    public BookServiceImpl(BookDao bookDao) {
    this.bookDao = bookDao;
    }
}

步骤2:配置文件中进行配置构造方式注入
        在applicationContext.xml 中配置,其中文件增加配置constructor配置。
<?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 id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
</bean>
</beans>

说明: 标签中
         name属性对应的值为构造函数中方法形参的参数名,必须要保持一致。 ref属性指向的是spring的IOC容器中其他bean对象
构造器注入多个简单数据类型
        步骤1: 添加多个简单属性并提供构造方法
        修改BookDaoImpl 类,添加构造方法
        1.首先我们创建几个数据的类型数据,让后配置xml文件,来导入数据类型
public class BookDaoImpl implements BookDao {
    private String databaseName;
    private int connectionNum;
    public BookDaoImpl(String databaseName, int connectionNum) {
        this.databaseName = databaseName;
        this.connectionNum = connectionNum;
    }
}

        

        步骤2: 配置完成多个属性构造器注入
        在applicationContext.xml 中进行注入配置
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
    <constructor-arg name="databaseName" value="mysql"/>
    <constructor-arg name="connectionNum" value="666"/>
</bean>
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
    <constructor-arg name="bookDao" ref="bookDao"/>
    <constructor-arg name="userDao" ref="userDao"/>
    </bean>

        2.自动配置

        什么是依赖自动装配?
                IoC容器根据bean 所依赖的资源在容器中自动查找并注入到 bean 的过程称为自动装配
(1)将<property>标签删除
(2)在<bean>标签中添加autowire属性
        首先来实现按照类型注入的配置
<?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.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"
autowire="byType"/>
</beans>
注意事项 :
        需要注入属性的类中对应属性的setter 方法不能省略
        被注入的对象必须要被Spring IOC 容器管理
        按照类型在Spring IOC 容器中如果找到多个对象,会报 NoUniqueBeanDefinitionException 一个类型在IOC 中有多个对象,还想要注入成功,这个时候就需要按照名称注入,配置方式为 :
<?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.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"
autowire="byName"/>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的轻量级JavaEE框架,它由Rod Johnson创建并由SpringSource公司(现在是Pivotal公司)进行开发、维护和支持。Spring的核心特点是IoC(Inverse of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程),它们可以帮助开发人员更快地开发应用程序,提高代码的可重用性、可维护性和可测试性。 Spring框架包括多个模块,如Spring核心模块、Spring MVC模块、Spring JDBC模块、Spring ORM模块等,每个模块都提供了很多有用的功能,可以帮助开发人员快速开发各种类型的应用程序。 Spring框架的主要优点包括: 1. IoC容器:Spring的IoC容器可以管理应用程序中的所有对象,通过控制对象之间的依赖关系,可以实现松散耦合的设计,从而提高代码的可重用性和可测试性。 2. AOP支持:Spring的AOP模块可以帮助开发人员实现面向切面编程,通过在方法调用前、调用后或异常抛出时插入代码,可以实现诸如事务管理、日志记录、性能监测等功能。 3. 事务管理:Spring提供了很多事务管理的支持,包括声明式事务、编程式事务等,可以帮助开发人员实现安全、可靠的事务管理。 4. MVC框架Spring的MVC模块可以帮助开发人员创建Web应用程序,包括处理HTTP请求、渲染响应、处理表单数据等功能。 5. 集成其他框架Spring可以与其他框架(如Hibernate、MyBatis、Struts等)集成,从而提供更强大、更灵活的功能。 总之,Spring是一个功能强大、易于使用、灵活性高的JavaEE框架,已经成为了Java企业级应用程序开发的事实标准。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值