zoukankan      html  css  js  c++  java
  • 3.装配Bean 基于XML

    一、实例化方式

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

    1.默认构造

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

    2. 静态工厂

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

    静态工厂:用于生成实例对象,所有的方法必须是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();
    
    
        }
    }
  • 相关阅读:
    Git学习总结(11)——Git撤销操作详解
    Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置
    Java Web学习总结(27)——JavaEE中Web服务器、Web容器、Application服务器区别及联系
    ZT onActivityResult在android中的用法
    转一个csdn看到的帖子:而立之年的程序猿失业了 [问题点数:0分,结帖人jinxingfeng_cn]
    [EffectiveC++]item39:明智而审慎地使用private
    [EffectiveC++]item38:通过复合塑膜出has -a 或“根据某物实现出”
    zt C++ list 类学习笔记
    zt C++标准库set类型
    [EffectiveC++]item37:绝不重新定义继承而来的缺省参数值
  • 原文地址:https://www.cnblogs.com/weihu/p/9465141.html
Copyright © 2011-2022 走看看