美文网首页
四:spring容器

四:spring容器

作者: 逗儿比的日常 | 来源:发表于2024-05-30 10:58 被阅读0次

概念

Spring容器里装的是需要管理的对象,装在一个HashMap集合中。我们用容器来实例化对象,管理对象之间的依赖
只要实现了BeanFactory和ApplicationContext接口的类,那么这两个接口的类都可以作为Spring容器

BeanFactory

是最顶层最基本的接口,它描述了容器需要实现的最基本的功能

ApplicationContext

继承了BeanFactory接口,它描述的内容更加广泛。它是把beans.xml文件里的内容先存放到HashMap容器里,需要用的时候从里面取,用得最多

实例化Bean的三种方式

在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 bean。bean 是由Spring IoC 容器实例化、组装和管理的对象

1)使用默认无参构造函数

在默认情况下,它会根据默认无参构造函数来创建类对象,如果bean中没有默认无参构造函数,将会创建失败

beans.xml文件中            
<bean id="accountDao" class="xn.xh.dao.impl.AccountDaoImpl"/>           
            
AccountDaoImpl.java文件中          
public class AccountDaoImpl implements IAccountDao {            
    //无参构造函数。如果一个类没有定义任何的构造函数,那么会自动生成一个无参构造函数       
    public AccountDaoImpl() {       
        System.out.println("创建了对象!");   
    }   

   ===========================================================
    //如果上面这个代码改成下面这样,执行client时就会报错
    public AccountDaoImpl(String name) {    
    System.out.println("创建了对象!");
    }   
   ===========================================================
    
    @Override       
    public void saveAccount() {     
        System.out.println("jdbc保存账户!");    
    }       
}           
            
            
client.java文件中          
public class client {           
    public static void main(String[] args) {        
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");   
        IAccountDao accountDao = (IAccountDao)context.getBean("accountDao");    
        accountDao.saveAccount();   
        //运行结果为在控制台打印出:创建了对象! Jdbc保存账户! 
    }       
}           

2)spring管理静态工厂,使用静态工厂的方法创建对象

模拟一个静态工厂,创建数据层实现类

beans.xml文件中                    
<bean id="accountDao" class="xn.xh.factory.StaticFactory" factory-method="createAccountDao" />                  
                    
AccountDaoImpl.java文件中                  
public class AccountDaoImpl implements IAccountDao {                    
    public AccountDaoImpl() {               
        System.out.println("创建了对象!");           
    }               
    @Override               
    public void saveAccount() {             
        System.out.println("jdbc保存账户!");            
    }               
}                   
                    
                    
StaticFactory文件中                    
public class StaticFactory {                    
    public static IAccountDao createAccountDao() {              
        return new AccountDaoImpl();            
    }               
}                   
                    
client.java文件中                  
public class client {                   
    public static void main(String[] args) {                
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");           
        IAccountDao accountDao = (IAccountDao)context.getBean("accountDao");            
        accountDao.saveAccount();           
        //运行结果为在控制台打印出:创建了对象! Jdbc保存账户!         
    }               
}                   

执行过程解析

此种方法是
使用StaticFactory类中的静态方法createAccountDao创建对象,并存入spring容器
id属性:指定bean的id,用于从容器中获取
class属性:指定静态工厂的全限定类名
factory-method属性:指定生产对象的静态方法

3)spring管理实例工厂-使用实例工厂的方法创建对象

模拟一个实例工厂,创建业务层实现类
次工厂创建对象,必须有工厂实例对象,再调用方法

beans.xml文件中                                            
<bean id="InstanceFactory" class="xn.xh.factory.InstanceFactory" />                                         
<bean id="accountDao" factory-bean="InstanceFactory" factory-method="createAccountDao" />                                           
                                            
AccountDaoImpl.java文件中                                          
public class AccountDaoImpl implements IAccountDao {                                            
    public AccountDaoImpl() {                                       
        System.out.println("创建了对象!");                                   
    }                                       
    @Override                                       
    public void saveAccount() {                                     
        System.out.println("jdbc保存账户!");                                    
    }                                       
}                                           
                                            
InstanceFactory.java文件中                                         
public class InstanceFactory {                                          
    public IAccountDao createAccountDao() {                                     
        return new AccountDaoImpl();                                    
    }                                       
}                                           
                                            
client.java文件中                                          
public class client {                                           
    public static void main(String[] args) {                                        
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");                                   
        IAccountDao accountDao = (IAccountDao)context.getBean("accountDao");                                    
        accountDao.saveAccount();                                   
        //运行结果为在控制台打印出:创建了对象! Jdbc保存账户!                                 
    }                                       
}                                           

执行过程解析

2)和3)那么麻烦,为什么不只用1)的方法进行创建实例对象呢? 比如上面工厂(InstanceFactory类)是第三方的jar包,我们无法修改里面的代码,但又想通过它来生成实例对象时就要用到了

bean标签

作用

用于配置对象让spring来创建的

属性

id:给对象在容器中提供一个唯一标识,用于获取对象
class:指定类的全限定类名,用于反射创建对象
scope:指定对象的作用范围
・singleton:默认值,单例的
・prototype:多例的
・request:web项目中Spring创建一个Bean的对象,将对象存入到request域中
・session:web项目中Spring创建一个Bean的对象,将对象存入到session域中

bean的作用范围和生命周期
单例对象

scope=“singleton”
一个应用只有一个对象的实例,它的作用范围就是整个引用
在加载beans.xml文件的时候创建对象,放入到HashMap集合当中,只会被创建一次。用getBean()方法调用的时候直接去集合里取
生命周期
・对象出生:当应用加载,创建容器时,对象就被创建了
・对象活着:只要容器在,对象一直活着
・对象死亡:当应用卸载,销毁容器时,对象就会被销毁

多例对象

scope="prototype"
每次访问对象时,都会重新创建对象实例
生命周期
・对象出生:当使用对象时,创建新的对象实例
・对象活着:只要对象在使用中,就一直活着
・对象死亡:当对象长时间不用时,被java的垃圾回收器回收了

相关文章

  • Spring原理简述

    一、什么是Spring容器? Spring容器,也称Spring Ioc容器或bean容器,是Spring框架的核...

  • Spring 学习笔记(二):Spring 容器以及 bean

    Spring 容器 在 Spring 应用中,应用对象生存于 Spring 容器中,Spring 容器负责创建对象...

  • 2.Spring IoC 容器

    1.Spring IoC 容器 IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象,把它...

  • spring原理机制

    1,关于spring容器: Spring的核心是spring容器,该容器负责管理spring中的java组件。 A...

  • Spring入门笔记

    Spring入门使用Spring容器Spring容器使用ApplicationContextApplication...

  • spring 学习02

    Spring 容器 在Spring 应用中,你的应用对象生存在Spring容器中,Spring 容器负责创建对象,...

  • spring详解(一)

    一:spring的基本用法: 1.关于spring容器: spring容器是Spring的核心,该 容器负责管理s...

  • 2018-05-12

    spring源码分析(四) 目录五、spring源码分析--5.5、IOC 容器的高级特性----1、介绍----...

  • Spring之旅(二):Spring 容器

    Spring容器 Spring容器的作用是啥? Spring中的对象Bean生存在Spirng容器(contain...

  • Spring 体系结构

    1.spring核心容器 核心容器由spring-core,spring-beans,spring-context...

网友评论

      本文标题:四:spring容器

      本文链接:https://www.haomeiwen.com/subject/dxggfjtx.html