`
znlian
  • 浏览: 2440 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring的注入及bean的作用域

阅读更多
java项目中:
1.建User类
public class User {
   private   String name;
   private String password;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("setusername-----"+name);
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
  
}



2.建二个接口,和实现类
public class TestSpringImpl implements TestSpring{
   
private User user;

public void setUser(User user){
this.user = user;
    this.user.setName("TestSpringImpl---testUser");
}

public void  save(String name){
  // System.out.println("TestSpringImpl---"+name);
System.out.println(this.user.getName());
}
}




public class SecondTestImpl implements SecondTest {
     
  private User us;
 
  public void setUs(User us){
  this.us = us;
  this.us.setName("SecondTestImpl--testUser");
  }

public void del(User user){
    //System.out.println("SecondTestImpl--User="+user.getName());
System.out.println(this.us.getName());
}
}

3.application.xml


   <bean id="testSpringImpl" class="TestSpringImpl">
   <property name="user" ref="user">
   </property>
   </bean>
  
    <bean id="secondTestImpl" class="SecondTestImpl">
    <property name="us" ref="user"></property>
    </bean>
   
    <bean name="user" class="User" scope="prototype"/>
    
   <bean id="test" class="Test">
   <!--  //setter 注入
     <property name="ts" ref="testSpringImpl"></property>-->
     <constructor-arg ref="testSpringImpl"></constructor-arg>
       <constructor-arg   value="i LOEVE YOUE"></constructor-arg>
     <constructor-arg ref="secondTestImpl"></constructor-arg>
   </bean>


当user类的,scope 为singleton
TestSpringImpl 修改了user的 name 为TestSpringImpl---testUser
SecondTestImpl 也修改了user的 name 为SecondTestImpl--testUser
save 和 del 输出的 user的 name 都是 SecondTestImpl--testUser
当user类的,scope 为prototype 时.
输出的分别是TestSpringImpl---testUser,SecondTestImpl--testUser
springAPI:
当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。默认

Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)



分享到:
评论

相关推荐

    详解Spring中bean的作用域

    Prototype 作用域是指每一次请求(将其注入到另一个 bean 中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的 bean 实例,相当于一个 new 的操作。对于 prototype 作用域的 bean,有一点非常重要,那...

    Spring容器中Bean的作用域编程开发技术共3页.pd

    在Spring框架中,Bean的作用域是其生命周期管理的关键部分,它决定了Bean的创建、共享以及销毁方式。本篇内容将深入探讨Spring容器中Bean的作用域编程开发技术,以帮助开发者更好地理解和利用这些特性来优化应用的...

    Spring实战之Bean的作用域singleton和prototype用法分析

    在Spring框架中,Bean的作用域是决定如何管理和创建Bean实例的关键概念。本篇文章将深入探讨两种主要的作用域:singleton和prototype,并通过实例分析其用法和注意事项。 首先,`singleton`是Spring默认的作用域,...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...

    spring中的bean

    6. **作用域**:Spring Bean有多种作用域,如单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)。单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建新的实例。 7. **AOP**:...

    spring bean的生命周期

    3. **作用域** - **Singleton**:Spring容器中只会存在一个Bean实例,所有对Bean的请求都会返回同一个实例。 - **Prototype**:每次请求都会创建一个新的Bean实例。 - **Request**:在Web应用中,每个HTTP请求...

    Spring中与Bean相关的接口

    Spring还允许我们自定义Bean的作用域。默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`...

    Spring之核心容器bean

    BeanFactory是Spring的基础容器,它提供bean的实例化、作用域、依赖注入、生命周期管理等功能。ApplicationContext则是在BeanFactory基础上扩展,增加了更多企业级服务,如消息处理、国际化、应用事件等。 **Bean的...

    SSH笔记-bean的作用域

    在`SSHnote_Spring_6_Scope`这个文件中,可能包含了关于如何在XML配置文件中定义不同作用域的Bean,以及如何在代码中注入和使用这些Bean的示例和解释。通过学习这部分内容,开发者可以更好地掌握Spring框架的核心...

    Spring bean 管理

    在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...

    Spring Bean 加载顺序 .

    对于Singleton作用域的Bean,Spring会在容器启动时一次性实例化所有Bean。实例化顺序基于Bean的依赖关系和`@DependsOn`注解。如果Bean之间没有依赖关系,Spring将按照Bean定义的顺序实例化。对于Prototype作用域,...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...

    spring的bean加载顺序样例项目

    - Bean的作用域包括单例(`singleton`)、原型(`prototype`)、请求(`request`)、会话(`session`)等。默认情况下,Bean是单例的,即在整个应用中只有一个实例。 2. **Bean的加载过程** - 当Spring容器启动时...

    spring bean life cycle

    `scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活运用,能帮助我们更好地控制Bean的行为,实现更高效、更可控的依赖管理和资源管理。通过...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    这个注解用于自动注入bean。当你在类的属性或方法上添加@Autowired,Spring会尝试查找匹配类型的bean并注入。 4. **ApplicationContext接口**: 这是Spring提供的接口,用于获取bean和管理bean的生命周期。你可以...

    深度解析spring容器管理bean

    Spring容器还提供了多种管理Bean生命周期的方法,包括初始化回调、销毁回调、以及作用域(singleton、prototype等)。初始化回调是指在Bean实例化后、开始使用前执行的方法,可以通过`init-method`属性指定。销毁回...

    Spring IOC原理补充说明(循环依赖、Bean作用域等)

    Spring IOC,即控制反转(Inversion of Control),...综上所述,Spring通过一系列机制解决了循环依赖问题,并提供了丰富的Bean作用域来满足不同场景的需求。理解这些原理对于优化Spring应用的性能和可维护性至关重要。

    spring(一)–概念和历史/hellospring/IOC创建对象的方式/Spring配置/set注入/c命名和p命名空间注入/bean的作用域

    【Spring框架概述】 ...Spring框架通过依赖注入和面向切面编程简化了Java应用的开发,提供了灵活的Bean管理方式,以及丰富的Bean作用域选择。学习和掌握Spring框架,对于开发高效、可维护的企业级应用至关重要。

    Spring--2.Spring 中的 Bean 配置-2-2

    Spring中的Bean可以有多种作用域,包括`singleton`(单例)、`prototype`(原型)、`session`(会话)、`request`(请求)等。`singleton`是最常见的一种,表示在整个应用中只有一个实例。`prototype`则每次请求...

Global site tag (gtag.js) - Google Analytics