栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Spring基于XML装配Bean

Java 更新时间:发布时间: 百科书网 趣学号

Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。 Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation(注解) 的 Bean 装配和自动装配等。

依赖注入(DI)

DI(Dependency Injection),即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

  1. 谁依赖于谁:当然是应用程序依赖于IoC容器;

  2. 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

  3. 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

  4. 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

依赖注入(DI)是实现IOC控制反转的一种方式,它就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。DI向类里面的属性中设置值,它不能单独存在,需要在IoC的基础上进行DI。

注入分类

bean 实例在调用无参构造器创建了空值对象后,就要对 bean对象的属性进行初始化。初始化是由容器自动完成的,称为注入。

根据注入方式的不同,常用的有两类:设值注入、构造注入。

构造函数注入

指 IoC 容器使用构造函数注入被依赖的实例。可以通过调用带参数的构造函数实现依赖注入,每个参数代表一个依赖。

详见Spring装配Bean

setter 注入(又称设值注入)

要求被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 , 没有set方法 , 是 is .

编写测试pojo类

Address.java

Student.java

package com.kuang.pojo;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
 public class Student {
 
     private String name;
     private Address address;
     private String[] books;
     private List hobbys;
     private Map card;
     private Set games;
     private String wife;
     private Properties info;
 
     public void setName(String name) {
         this.name = name;
    }
 
     public void setAddress(Address address) {
         this.address = address;
    }
 
     public void setBooks(String[] books) {
         this.books = books;
    }
 
     public void setHobbys(List hobbys) {
         this.hobbys = hobbys;
    }
 
     public void setCard(Map card) {
         this.card = card;
    }
 
     public void setGames(Set games) {
         this.games = games;
    }
 
     public void setWife(String wife) {
         this.wife = wife;
    }
 
     public void setInfo(Properties info) {
         this.info = info;
    }
 
     public void show(){
         System.out.println("name="+ name
                 + ",address="+ address.getAddress()
                 + ",books="
        );
         for (String book:books){
             System.out.print("<<"+book+">>t");
        }
         System.out.println("n爱好:"+hobbys);
 
         System.out.println("card:"+card);
 
         System.out.println("games:"+games);
 
         System.out.println("wife:"+wife);
 
         System.out.println("info:"+info);
 
    }
 }
常量注入

     
 

测试:

 @Test
 public void test01(){
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 
     Student student = (Student) context.getBean("student");
 
     System.out.println(student.getName());
 
 }
Bean注入

注意点:这里的值是一个引用,ref

数组注入

List注入

     
         听歌
         看电影
         爬山
     
 
Map注入
 
     
         
         
     
 
set注入

     
         LOL
         BOB
         COC
     
 
Null注入
 
Properties注入

     
         20190604
         
         小明
     
 
测试结果:

p命名和c命名注入

User.java :【注意:这里没有有参构造器!】

P命名空间注入 :

需要在头文件中加入约束文件

导入约束 : xmlns:p="http://www.springframework.org/schema/p"
 
 
 
c 命名空间注入

需要在头文件中加入约束文件

导入约束 : xmlns:c="http://www.springframework.org/schema/c"
 
 

发现问题:爆红了,刚才我们没有写有参构造!

解决:把有参构造器加上,这里也能知道,c 就是所谓的构造器注入!

测试代码:
@Test
 public void test02(){
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     User user = (User) context.getBean("user");
     System.out.println(user);
 }
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/294763.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号