live的gravatar头像
live 2016-08-25 14:37:31

Spring容器解析applicationContext.xml,提供bean的三种实例化用法(直接调用,静态工厂,实例工厂)

Spring容器(bean容器)通过解析applicationContext.xml,提供bean的三种用法(直接调用,静态工厂,实例工厂)
很多程序员应该不知道,除了平常的用法,还有两种:静态工厂 和 实例工厂.

方式1,普通用法
    <bean id="UserService" class="module.serviceImpl.UserServiceImpl">
        <property name="userDao" ref="UserDao"></property>
    </bean>
    
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( xmlPath);
    UserDao userDao = (UserDao) context.getBean("userDao");

 方式2,静态工厂的配置
     <bean id="userDao" class="ioc.createBean.staticFactory.UserDaoImpl_staticFactory" factory-method="getUserDaoImpl"></bean>
 
     public class UserDaoImpl_staticFactory {
        
        /**
         * 提供bean的方法必须是static修饰的
         * @methodName: getUserDaoImpl
         * @description:
         * @param @return
         * @return UserDaoImpl
         * @throws
         # @eg:
         */
        public static UserDaoImpl getUserDaoImpl() {
            System.out.println("这个bean来自:静态工厂!");
            return new UserDaoImpl();
        }
    }
    
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( xmlPath);
    UserDao userDao = (UserDao) context.getBean("userDao");

方式3,bean实例工厂的配置
    <bean id="instanceFactory" class="ioc.createBean.instanceFactory.UserDaoImpl_instanceFactory"></bean>
    <bean id="userDao" factory-bean="instanceFactory" factory-method="getUserDao"></bean>

    public class UserDaoImpl_instanceFactory {
        
        /**
         * 提供bean的方法一定是非静态的
         * @methodName: getUserDao
         * @description:
         * @param @return
         * @return UserDaoImpl
         * @throws
         # @eg:
         */
        public UserDaoImpl getUserDao() {
            System.out.println("这个bean来自:实例工厂!");
            return new UserDaoImpl();
        }
    }

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( xmlPath);
    UserDao userDao = (UserDao) context.getBean("userDao");
    

需要注意的是:

静态工厂用法中,提供bean的方法一定要用static修饰:public static ...

不然会报异常:

<!-- 
		异常,原因:方法应该变为静态的
		Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in class path resource [ioc/createBean/staticFactory/bean_staticFactory.xml]: No matching factory method found: factory method 'getUserDaoImpl'
	 -->

Spring容器解析applicationContext.xml,提供bean的三种实例化用法(直接调用,静态工厂,实例工厂)

Spring容器解析applicationContext.xml,提供bean的三种实例化用法(直接调用,静态工厂,实例工厂)


打赏

文件名:源码-Spring容器(bean容器)通过解析applicationContext.xml,提供bean的三种用法(直接调用,静态工厂,实例工厂).zip,文件大小:9.719K 下载
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友