3.装配Bean 基于XML

一、实例化方式

3种bean实例化方式:默认构造、静态工厂、实例工厂

1.默认构造

<bean id="" class="">  必须提供默认构造

2. 静态工厂

l 常用与spring整合其他框架(工具)

l 静态工厂:用于生成实例对象,所有的方法必须是static

<bean id=""  class="工厂全限定类名"  factory-method="静态方法">
UserService.java
package com.jd.inject.static_factory;

public interface UserService {

    public void addUser();

}
UserServiceImpl.java
package com.jd.inject.static_factory.impl;

import com.jd.inject.static_factory.UserService;

public class UserServiceImpl implements UserService {

    @Override
    public void addUser() {
        System.out.println("b_static_factory add user");
    }

}
MyBeanFactory.java
package com.jd.inject.static_factory;

import com.jd.inject.static_factory.impl.UserServiceImpl;

/**
 * @author weihu
 * @date 2018/8/12/012 18:54
 */
public class MyBeanFactory {

    /**
     * 创建实例
     * @return
     */
    public static UserService createService(){
        return new UserServiceImpl();
    }
}

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                              http://www.springframework.org/schema/beans/spring-beans.xsd">

   <!--将静态工厂创建的实例交予spring
   class 确定静态工厂全限定类名
   factory-method 确定静态方法名,还是创建UserServiceImpl对象
   -->
    <bean id="userServiceId" class="com.jd.inject.static_factory.MyBeanFactory" factory-method="createService"></bean>
</beans>
测试类

TestStaticFactory.java
package com.jd.test;

import com.jd.inject.static_factory.MyBeanFactory;
import com.jd.inject.static_factory.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author weihu
 * @date 2018/8/12/012 18:57
 */
public class TestStaticFactory {

    @Test
    public void testStaticFactory(){
        //自定义工厂
        UserService userService = MyBeanFactory.createService();
        userService.addUser();

    }

    @Test
    public void testSpringStaticFactory(){
        //spring工厂
        String xmlPath="com/jd/inject/static_factory/beans.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        UserService userServiceId = applicationContext.getBean("userServiceId", UserService.class);
        userServiceId.addUser();
    }
}

3. 实例工厂

实例工厂:必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的。

UserService.java
package com.jd.inject.factory;

public interface UserService {

    public void addUser();

}
UserServiceImpl.java
package com.jd.inject.factory.impl;

import com.jd.inject.factory.UserService;

public class UserServiceImpl implements UserService {

    @Override
    public void addUser() {
        System.out.println("factory add user");
    }

}
MyBeanFactory.java
package com.jd.inject.factory;

import com.jd.inject.factory.impl.UserServiceImpl;

/**
 * @author weihu
 * @date 2018/8/12/012 18:54
 */
public class MyBeanFactory {

    /**
     * 创建实例
     * @return
     */
    public UserService createService(){
        return new UserServiceImpl();
    }
}

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                              http://www.springframework.org/schema/beans/spring-beans.xsd">

 <!--创建工厂实例-->
 <bean id="myBeanFactoryId" class="com.jd.inject.factory.MyBeanFactory"></bean>
 <!--获得userservice
    factory-bean确定工厂实例
    factory-method 确定普通方法
 -->
 <bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>
</beans>
测试类TestFactory.java
package com.jd.test;

import com.jd.inject.factory.MyBeanFactory;
import com.jd.inject.factory.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author weihu
 * @date 2018/8/12/012 19:16
 */
public class TestFactory {

    @Test
    public void testFactory(){
        MyBeanFactory myBeanFactory=new MyBeanFactory();
        UserService userService = myBeanFactory.createService();
        userService.addUser();

    }

    @Test
    public void testSpringFactory(){
        String xmlPath="com/jd/inject/factory/beans.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        UserService userServiceId = applicationContext.getBean("userServiceId", UserService.class);
        userServiceId.addUser();

    }
}

原文地址:https://www.cnblogs.com/weihu/p/9465141.html

时间: 2024-12-14 22:12:43

3.装配Bean 基于XML的相关文章

框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示

1 什么是spring 1.1官网 spring.io 1.2介绍 Spring的核心是控制反转(IoC)和面向切面(AOP). IoC(Inverse of Control 反转控制) AOP(Aspect Oriented Programming 面向切面编程为内核) 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架. *轻量级:依赖其他内容较小,使用资源消耗也少.对比:EJB 重量级 *分层:经典三层体系架构,spring 提供解决方案

spring IOC容器中装配Bean(XML)

——基于XML的配置 依赖注入 spring 依赖注入的方式有,属性注入和构造函数注入,还有不常用到的工厂方法注入. (1)属性注入 属性注入要求 Bean 提供默认的构造函数,并为需要的属性提供 set 方法,spring 先调用 Bean 的默认构造函数实例化 Bean 对象,然后通过反射的方法调用 set 方法注入属性值.如下简单的范例: public class Phone { private int id; private String name; private double pri

第2章—装配Bean—通过XML装配Bean

通过XML装配Bean ? 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配置规范 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo

SpringInAction读书笔记--第2章装配Bean

实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器负责把需要相互协作的对象引用赋予各个对象.创建对象之间协作关系的行为称为装配,这也是依赖注入的本质.Spring为装配bean提供了三种主要的装配机制. 1.自动化装配bean Spring从两个角度来实现自动化装配: 组件扫描:Spring会自动发现应用上下文中所创建的bean 自动装配:Spri

Spring学习笔记(三)之装配Bean

除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配. 有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用中的包. 这时我们就要在基于代码代码的装配和基于XML的装配中进行选择,前面我们说到了JavaConfig相比XML更强大更安全. 一.基于Java代码的装配Bean(JavaConfig) 但是JavaConfig又与Java有所区别. 概念上  JavaConfig是配置 与应用的其他代码业务逻

(spring-第2回)Spring的Schema,基于XML的配置(在IoC容器中装配Bean的前奏片)

要深入了解Spring机制,首先需要知道Spring是怎样在IoC容器中装配Bean的.而了解这一点的前提是,要搞清楚Spring基于Schema的Xml配置方案. 在深入了解之前,必须要先明白几个标签的意思(我会逐步引导读者理解,刚开始的懵懂无所谓,读者自会渐入佳境.初极狭,才通人.复行数十步,豁然开朗.). 什么是XML Schema? 用来描述 XML文档的结构,也被简称为XSD(XML Schema Definition),是一些规则的集合.(方式:通过定义schema文件 如 spri

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

Spring实战之通过XML装配bean

尽管Spring长期以来确实与XML有着关联,但现在需要明确的是,XML不再是配置Spring的唯一可选方案.Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的.但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig. 1.1创建XML配置规范 在使用XML为Spring装配b

spring学习总结——装配Bean学习三(xml装配bean)

通过XML装配bean Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的.但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig. 一.创建XML配置规范 在使用XML为Spring装配bean之前,你需要创建一个新的配置规范.在使用JavaConfig的时候,这意味着要创建