spring-高级装配,bean的作用域,工厂方法在xml中的调用

高级装配

  • bean 的作用域

    • 单例(Singleton):在整个应用程序中,只创建bean 的一个实例
    • 原型(Prototype):每次注入或通过spring 上下文获取时,都会创建一个新的bean 实例
    • 会话(Session):在Web 应用中,为每个会话创建一个bean 实例
    • 请求(request):在Web 应用中,为每个请求创建一个bean 实例
  • <bean> 中有一个属性是 scope ,其默认值为Singleton,一般项目还可以选prototype,web项目还可选session和request,可以直接在xml 文件中设置bean 是进行配置。

    • singleton:Spring 会在上下文加载的时候,就创建bean 对象,并且默认所有的bean 对象都是单例存在的,不随获取次数的变化而变化,不随注入次数的变化而变化
    • prototype:Spring 会在上下文加载的时候不会创建bean 对象,bean 对象的实例是在我们getBean()获取时才创建的,并且每次获取都会拿到不用的bean 对象
  • 还可以在自动装配中配置scope属性,定义bean 的作用域

    @Component
    // 下面是三种Scope 的配置方式
    //@Scope("pototype")
    //@Scope(scopeName = "prototype")
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public class MessageService {
        public MessageService() {
            super();
            System.out.println("messageservice");
        }
    
        public String getMessage(){
            return "helloworld";
        }
    }
    
  • javaConfig中定义bean 的作用域

    首先定义配置类,在配置类中添加@Bean 注解时,在其下方添加@Scope

    @Configuration
    public class AppConfig {
        @Bean
        @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
        public MessagePrinter messagePrinter(){
            return new MessagePrinter();
        }
    }
    
  • bean 对象的初始化和销毁

    首先需要在类中创建两个函数,一个作为初始化方法,另一个作为销毁的方法,配置之后bean 对象在创建和销毁之前会调用相关的函数。

    • xml 文件

      在创建bean 时,配置其中的lazy-init、destroy-method 和init-method 节点。

          public void init(){
              System.out.println("初始化方法。。。。");
          }
      
          public void destroy(){
              System.out.println("销毁函数。。。。");
          }
      
          <bean id="printer2" class="hello.MessagePrinter" lazy-init="true"
                destroy-method="destroy"
                init-method="init"/>
      
    • 自动注解@PostConstructh 和@PreDestroy

          @PostConstruct
          public void init(){
              System.out.println("初始化方法。。。。");
          }
      
          @PreDestroy
          public void destroy(){
              System.out.println("销毁函数。。。。");
          }
      
  • 工厂方法在spring环境初始化成功后就会被调用(重点在xml 怎么调用工厂方法)

        <!-- 静态工厂,createPrinter1是静态工厂方法-->
        <bean id="printer2" class="hello.MessagePrinter" factory-method="createPrinter1"/>
        
        <!--实例工厂,creatPrinter2是实例工厂方法,先创建factory-bean节点-->
        <bean id="printerFactory" class="hello.MessagePrinter"/>
        <bean id="printer3" factory-bean="printerFactory" factory-method="creatPrinter2"/>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值