4、spring自动装配(spring笔记)

一、根据名称自动装配属性(工程spring_autowire_byName

这种方式一般用在开发阶段,用于提供我们的开发效率。我们通过一个示例进行说明。
相关实体:
Bean2.java

private Bean3 bean3;
private Bean4 bean4;
private Bean5 bean5;

Bean3.java

private int id;
private String name;
private String password;

Bean4.java

private int id;
private String name;

Bean5.java

private int age;

配置:applicationContext-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" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
           default-autowire="buName">

    <!-- <bean id="bean2" class="com.bjsxt.spring.Bean2">
        <property name="bean3" ref="bean3" />
        <property name="bean4">
            <ref bean="bean4" />
        </property>
        <property name="bean5" ref="bean5" />
    </bean> -->
    
    <bean id="bean2" class="com.bjsxt.spring.Bean2" />

    <bean id="bean5" class="com.bjsxt.spring.Bean5">
        <property name="age" value="20" />
    </bean>
</beans>

applicationContext-other.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:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
   
   <bean id="beanAbstract" abstract="true">
        <property name="id" value="1000"/>
        <property name="name" value="Jack"/>
   </bean>         
   
   <bean id="bean3" class="com.bjsxt.spring.Bean3" parent="beanAbstract">
        <property name="name" value="Tom"/>
        <property name="password" value="123"/>
   </bean>        
   
   <bean id="bean4" class="com.bjsxt.spring.Bean4" parent="beanAbstract"/>
</beans>

说明:这里我们之所以可以这样简单的配置Bean2类,是因为我们在Bean2类中的属性名字和Bean3、Bean4、Bean5这些类中配置的id号是名字是一样的,同时提供了getter和setter方法,这样spring就会根据这个名字去找相应的类,然后实例化之后注入进来,当然这样配置之后是不会生效的,我们需要在<beans>标签中配置default-autowire="byName"。这种方式一般用在开发阶段,在项目发布时不推荐这样做,因为在配置文件中看不到一个bean的属性,不利于维护,一般在开发完之后再改成一般方式。

测试:AutowireTest.java

package com.bjsxt.spring;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import junit.framework.TestCase;

public class AutowireTest extends TestCase {
    
    private BeanFactory factory;
    
    @Override
    protected void setUp() throws Exception {
        factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");   
    }

    public void testAutowire() {
        Bean2 bean2 = (Bean2)factory.getBean("bean2");
        System.out.println("bean2.bean3.id=" + bean2.getBean3().getId());
        System.out.println("bean2.bean3.name=" + bean2.getBean3().getName());
        System.out.println("bean2.bean3.password=" + bean2.getBean3().getPassword());
        System.out.println("bean2.bean4.id=" + bean2.getBean4().getId());
        System.out.println("bean2.bean4.name=" + bean2.getBean4().getName());
        System.out.println("bean2.bean5.age=" + bean2.getBean5().getAge());
    }
    
}

二、根据类型自动装配(工程spring_autowrire_byType

这里所有的类和配置都和上面一样,但是在<beans>标签中配置default-autowire="byType",此时spring会根据各个类的实际类型去找相关的实体类,id可以随便起名或者忽略。我们推荐使用这种方式进行配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,398评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,054评论 6 342
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,648评论 1 133
  • Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主...
    逆风飞行1226阅读 7,180评论 0 13
  • “这世间所有相遇都指向团聚,唯有你与我的指向别离。” - 〔一〕 风声一啸,轻易拂去万物根基。 越过谎言绵延的山,...
    扶曦阅读 4,110评论 0 1