第三章:Spring自动装配

一)自动装配模式

Spring容器可使用自动装配进行依赖注入。使用<bean>元素的autowire属性,为一个bean定义指定自动装配模式。

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

 

二)no自动装配

第一步:创建一个maven项目,在pom.xml文件中引入Spring的jar

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

 

第二步:创建两个Service,用于自动装配

MessageChecker.java

package com.oysept.set;

public class MessageChecker {

    public void printMessage(String message) {
        System.out.println(message);
    }
}

MessageService.java

package com.oysept.set;

public class MessageService {
	
    // 参数
    private MessageChecker messageChecker;
    private String message;
	
    // set方法
    public void setMessageChecker(MessageChecker messageChecker) {
        this.messageChecker = messageChecker;
    }

    public void setMessage(String message) {this.message = message;}

    public void printMessage() {
        messageChecker.printMessage(this.message);
    }
}

 

第三步:创建spring-config.xml配置文件,并创建对应的bean

<?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-3.0.xsd">
    
    <!-- 有参构造器, Service -->
    <bean id="messageService" class="com.oysept.set.MessageService" autowire="default">
        <property name="messageChecker" ref="messageChecker" />
        <property name="message" value="Hello autowire default Message!" />
    </bean>
    
    <bean id="messageChecker" class="com.oysept.set.MessageChecker"/>
</beans>

 

第四步:创建一个测试类

package com.oysept.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.oysept.set.MessageService;

public class MsgTest {

    public static void main(String[] args) {
        // 1.获取容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
        
        // 2.得到业务层对象, 并执行方法
        MessageService msgA = (MessageService) ac.getBean("messageService");
        msgA.printMessage();
    }
}

打印效果图:

 

三)byName自动装配

只需要改造一下spring-config.xml配置,如下:

注:bean的id一定需要和MessageService.java中的属性名一致,否则抛异常。

<?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-3.0.xsd">
    
    <!-- 有参构造器, Service -->
    <bean id="messageService" class="com.oysept.set.MessageService" autowire="byName">
        <!-- 去除显示配置
        <property name="messageChecker" ref="messageChecker" />
        -->
        <property name="message" value="Hello autowire byName Message!" />
    </bean>
    
    <!-- 该bean的id一定需要和MessageService中的属性名一致,否则抛异常 -->
    <bean id="messageChecker" class="com.oysept.set.MessageChecker"/>
</beans>

打印效果图:

 

四)byType自动装配

改造一下spring-config.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-3.0.xsd">
    
    <!-- 有参构造器, Service -->
    <bean id="messageService" class="com.oysept.set.MessageService" autowire="byType">
        <property name="message" value="Hello autowire byType Message!" />
    </bean>
    
    <!-- 该bean的id可随便命名,只需要使用的时候指定 -->
    <bean id="msgChecker" class="com.oysept.set.MessageChecker"/>
</beans>

打印效果图:

 

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值