`
wutheringsea
  • 浏览: 262565 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring 笔记2---Bean的定义及范围

阅读更多

1. depends-on属性

   设置依赖关系的bean,如果存在多个依赖对象,用逗号,分号或空格隔开.如

<bean id="testBean1" class=.... depends-on="testBean2,testBean3"/>

  可以解决有特殊关系的两个或多个Bean的实例化顺序问题,假如以上代码不加入depends-on属性,就必须要求testBean2,testBean3要在testBean1之前实例化,所以定义必须在testBean1前。

<bean id="testBean2" class.../>

<bean id="testBean3" class.../>

<bean id="testBean1" class...>
<property name="testBean2" ref="testBean2"/>
<property name="testBean3" ref="testBean3"/>
</bean>

 这样会带来代码维护的不方便,所以最好的办法是启用depends-on。

 

2. 抽象及子Bean定义

Spring允许用显式和隐式方式申明抽象Bean。区别在于显式定义了class属性,而隐式没有。

显式:

<bean id="abstractBean1" class="...." abstract="true"/>

<bean id="childBean1" class="...." parent="abstractBean1"/>

 隐式:

<bean id="abstractBean1"  abstract="true"/>

<bean id="childBean1" class="...." parent="abstractBean1"/>

其中parent属性的声明完成了继承关系的映射。

 

同样的,可以实现“多重”的继承:

<bean id="abstractBean1" class="...." abstract="true"/>

<bean id="abstractBean2" class="...." parent="abstractBean1" abstract="true"/>

<bean id="childBean3" class="...." parent="abstractBean2"/>

 这样childBean3也就同时拥有了Bean1和Bean2的属性。

 

3. alias别名

能降低应用和受管Bean间的耦合性。

<bean id="testBean" class="....."/>
<alias name="testBean" alias="tb"/>

 也可以通过别名获得该Bean

 

ITestBean tb = (ITestBean)factory.getBean("tb");

 

4.读取配置properties文件属性

例如userinfo.properties内容如下

db.username=scott
db.password=tiger

 那么可以通过Spring的PropertyPlaceholderConfigurer实现BeanFactoryPostProcessor接口来对文件进行管理

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
 <list>
  <value>userinfo.properties</value>
</list>
</property>
</bean>

 配置好后,就可以通过声明以下Bean来获取userinfo信息

 

<bean name="userinfo" class....>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</bean

 

*Spring已经提供了<context:property-placeholder/>元素来代替配置PropertyPlaceholderConfigurer对象了

 

<context:property-placeholder location="userinfo.properties"/>

 

*<context:property-override/>元素是检查properties中是否存在需要覆盖的属性致,有则替换覆盖,没有则保留受管Bean中的对应属性。

<context:property-override location="ui.properties"/>

<bean name="userInfo" class...>
<property name="username" value="un"/>
<property name="password" value="pw"/>
</bean>


5. 受管Bean的作用范围

singleton  默认的 <bean/>定义

prototype DI容器不会主动实例化prototype受管Bean

request

session

globalSession

 

*lazy-init="true" 并不意味着构造IOC容器时这一个<bean/>不会被实例化,因为如果BeanA需要引用BeanB,A未启用延迟加载,而B启用了。当容器在完成A实例化时,容器发现它引用了B,因此容器会马上实例化B.无论B是否设定了延迟加载,只要A需要它,容器就会毫不犹豫的去完成B的实例化。

分享到:
评论

相关推荐

    Sping学习笔记(2)----实例化Bean的三种方式

    这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式的详细说明: 1. **XML配置方式** 在早期的Spring版本中,XML配置是最常见的实例化Bean的...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    spring源码--AOP流程--笔记.docx

    2. 解析 AOP 配置:在解析 Bean 定义文件时,Spring AOP 也会解析 AOP 配置文件,例如 `&lt;aop:config&gt;` 标签。在这个过程中,Spring AOP 使用 configBeanDefinitionParser 来解析 AOP 配置文件,并生成相应的 Bean ...

    SpringDM笔记6-Fragment及配置Log4j Fragment Bundle

    例如,我们可以定义一个Bean来获取`log4j.appender.FILE.File`的值: ```xml &lt;bean id="logFile" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt; &lt;/bean&gt; ``` 6. **配置...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    除了基本的`@Component`家族,Spring还提供了一些高级注解,如`@Scope`用于定义Bean的作用域,`@Lazy`用于延迟初始化Bean,`@Qualifier`用于在多个相同类型的Bean中指定特定的一个。 ### **总结** Spring的自动...

    Spring框架笔记-搭建-基础理论--面试.pdf

    Spring框架作为Java EE领域内非常流行的开源框架,其影响力和使用范围都非常广泛。从给定文件中提取的知识点,我们将主要围绕Spring框架的基础理论、搭建方法、核心特性以及如何在项目中进行配置和使用。以下是详细...

    spring-framework-5.2.3.RELEASE.rar

    3. **配置Spring**:创建Spring的配置文件(如`applicationContext.xml`),定义bean及其依赖关系。 4. **编写代码**:利用Spring的API编写业务逻辑,利用DI和AOP特性来增强代码的可维护性和可测试性。 5. **运行...

    Spring自学笔记-Ioc(控制反转)容器

    ### Spring自学笔记-Ioc(控制反转)容器 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用。它提供了一种轻量级的方式来管理应用程序的各种组件和服务,使得开发者能够更容易地构建...

    Spring学习笔记+学习源码.zip

    3. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring AOP允许开发者定义“切面”——跨越多个类的行为或责任。通过切点(Pointcut)和通知(Advice),可以在不修改原有代码的情况下添加新的功能。 4...

    SSH笔记-依赖、继承bean的配置

    在Spring中,一个bean可以基于另一个bean定义,这意味着它将继承父bean的所有属性和配置,包括默认的初始化方法、销毁方法、属性值等。这样,我们可以在父bean中定义通用的配置,而在子bean中只定义特有的部分,避免...

    SSH笔记-IOC容器中 Bean 的生命周期

    2. **属性注入**:在Bean实例化后,Spring会根据Bean定义中的属性(如`property`、`ref`等)进行依赖注入,包括值注入和引用注入。 3. **初始化处理**:这是通过`BeanPostProcessor`接口的关键部分。实现了该接口的...

    Spring笔记整理.zip

    2. **Bean属性与子元素**:在Spring中,每个bean都有自己的属性,比如初始化方法、销毁方法、依赖关系等。通过`@Value`注解,可以直接注入值到bean的字段中。同时,Spring允许定义bean的子元素,如`@Profile`用于在...

    MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring).rar

    《MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring)》这份压缩包文件聚焦于Java企业级开发中的核心技术,涵盖了JSP、Struts、Hibernate和Spring四大框架,它们是构建现代J2EE应用的基础。以下是这些...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

    spring-boot-test_springboot学习笔记

    这些代码展示了如何编写测试类,如何定义断言,以及如何使用`@Autowired`来注入需要的bean。 五、最佳实践 1. **测试覆盖率**:确保测试覆盖尽可能多的代码路径,以提高软件质量。 2. **测试隔离**:每个测试用例...

    spring-boot学习笔记

    ### Spring Boot 学习笔记知识点总结 #### 一、Spring发展史 - **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地...

    spring培训-笔记

    Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式事务 22 Spring对其它企业应用支持 22 ...

    spring-note spring 读书笔记

    `spring_ioc.txt`可能详细解释了如何定义Bean、Bean的初始化和销毁方法,以及如何通过XML和Java配置实现IOC。 2. **面向切面编程(AOP)**: AOP允许在不修改业务代码的情况下,实现如日志记录、性能监控等横切关注...

Global site tag (gtag.js) - Google Analytics