Spring框架 工厂特性

目录

Spring 工厂创建对象的模式

Spring 工厂创建对象的原理

Spring 工厂管理组件声明周期

Spring 工厂好处


Spring 工厂创建对象的模式

单例:工厂默认在创建对象时都是使用单例方式,单例方式无论在工厂获取多少次,始终获取的是同一个对象

  • 默认 Spring 在管理组件对象是 单例创建(singleton)

    例如:service、dao
  • 如何修改工厂创建组件对象为多例  

    struts2 中 action 必须以多例形式管理,否则避免数据共同使用
    <!--
       单例/多例
       scope:
              singleton 单例模式
              prototype 多例模式
    -->
    <bean id="userService" class="com.grocery.service.UserService" scope="singleton" />


Spring 工厂创建对象的原理

        原理:反射 + 构造方法

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        // 启动容器
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");

        // 获取容器中对象
        UserService userService = (UserService) context.getBean("userService");
        System.out.println(userService);

        // 利用反射获取Bean(工厂原理)
        UserService userService1 = (UserService) Class.forName("com.grocery.service.UserService").newInstance();
        System.out.println(userService1);
    }

Spring 工厂管理组件声明周期

        1、组件对象什么时候创建

                工厂启动,工厂中所有单例对象随之创建

                工厂使用(获取)创建多例对象

        2、组件对象什么时候销毁

                工厂关闭,工厂中所有单例对象随之销毁

                工厂不负责多例对象销毁,由虚拟机GC销毁

import com.grocery.dao.UserDao;

public class UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void getName(String userName){
        System.out.println("userService:" + userName);
        userDao.getName(userName);
    }

    public void init(){
        System.out.println("组件对象初始化");
    }

    public void destory(){
        System.out.println("组件对象销毁");
    }
}
    <bean id="userDao" class="com.grocery.dao.UserDao" />

    <!--
       声明周期
       init-method    在对象初始化时调用方法
       destroy-method 在对象销毁时调用方法
    -->
    <bean id="userService" class="com.grocery.service.UserService" autowire="byName" scope="singleton" init-method="init" destroy-method="destory"/>

Spring 工厂好处

  • 解耦合 使用配置文件管理 Java 类,在生产环境中更换 Java 类的实现时不需要重新部署,修改文件即可
  • 减少 JVM 内存占用 Spring 默认使用单例的模式创建 Bean,减少内存占用
  • 通过依赖注入方式建立组件,使组件与组件的关系更加清晰,方便维护管理 
  • 打造轻量级的 JAVAEE 管理    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值