【Spring】 Spring Beans 自动装配

自动装配概述

前面【Spring】Spring 依赖注入 学会如何使用bean元素来声明 bean 和通过使用 XML 配置文件中的和元素来注入 。

Spring 容器可以在不使用和 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。

自动装配模式

Spring提供了5中自动装配的模式

模式 描述
no 这是默认的设置,它意味着没有自动装配,应该使用显式的bean引用来连线。不用为了连线做特殊的事。
byName 由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。
byType 由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出。
constructor 类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生
autodetect Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。

byName

这种模式由属性名称指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。然后,它尝试将它的属性与配置文件中定义为相同名称的 beans 进行匹配和连接。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

创建dao

UserDao接口代码

public interface UserDao {
    public void selectUser();
}

UserDaoImpl实现类代码

public class UserDaoImpl implements  UserDao{
    @Override
    public void selectUser() {
        System.out.println("UserDaoImpl -> selectUser");
    }
}

创建Service

UserService接口代码

public interface UserService {
    public void selectUser();
}

UserServiceImpl实现类代码

public class UserServiceImpl implements UserService{
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void selectUser() {
        userDao.selectUser();
        System.out.println("UserServiceImpl -> selectUser");
    }
}

Spring配置文件

<?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 https://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="userDao" class="com.lucas.dao.UserDaoImpl"/>
    <bean id="userService" class="com.lucas.service.UserServiceImpl" autowire="byName">
    </bean>
</beans>

猜你喜欢

转载自blog.csdn.net/huweiliyi/article/details/107647629
今日推荐