`
thaIm
  • 浏览: 91800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring --- IOC III

阅读更多
承接上两篇IOC的介绍,我们继续...
9)ApplicationContextAware 和 BeanNameAware
    加载Spring配置文件时,如果Spring配置文件中所定义的Bean类,如果该类实现了ApplicationContextAware接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware接口中的
    public void setApplicationContext(ApplicationContext context) throws BeansException
    方法,并且自动可获得ApplicationContext 对象。前提必须在Spring配置文件中指定改类。

一个Demo程序如下:
Spring配置文件中配置:
<bean id="springContext" class="com.shine.spring.SpringContextHelper"></bean>
/**
* ApplicationContext的帮助类
* 自动装载ApplicationContext
*/
public class SpringContextHelper implements ApplicationContextAware{
  private static ApplicationContext context ;
  //注入ApplicationContext
  @Override
  public void setApplicationContext(ApplicationContext context)throws BeansException {
    //在加载Spring时自动获得context
    SpringContextHelper.context = context;
    System.out.println(SpringContextHelper.context);
  }
  public static Object getBean(String beanName){
    return context.getBean(beanName);
  }
}


    继承了BeanNameAware的类会在初始化函数之前,普通bean属性加载之后调用setBeanName()方法:
public interface BeanNameAware {
  void setBeanName(string name) throws BeansException;
}


    类似的Aware接口spring还提供了很多,功能也是个不相同。这里就不一一例举了。以后碰到在介绍吧~~

10)bean定义的“继承”
注意一个属性设置:abstract="true"
<bean id="inheritedTestBean" abstract="true" class="org.springframework.beans.TestBean">
  <property name="name" value="parent"/>
  <property name="age" value="1"/>
</bean>
<bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBean" init-method="initialize">
  <property name="name" value="override"/>
  <!-- the age property value of 1 will be inherited from parent -->
</bean>

并且:depends on, autowire mode,dependencycheck,singleton,scope,lazyinit.这些属性不具有“继承”性,仍然保持子bean的默认设置。

11)BeanPostProcessor
    BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行作用。它不会对定义在另一个容器中的bean进行任何处理。该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。以下我们看个实例:
<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>  
package com.spring.test.di;
 
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
 
public class BeanPostPrcessorImpl implements BeanPostProcessor {
    // Bean 实例化之前进行的处理
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
       System.out.println("对象" + beanName + "开始实例化");
       return bean;
    }
    // Bean 实例化之后进行的处理
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
       System.out.println("对象" + beanName + "实例化完成");
       return bean;
    }
}

  测试代码如下:
 // 得到ApplicationContext对象  
 ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");  
 // 得到Bean  
 ctx.getBean("logic");  

  控制台打印结果将会是:

对象logic开始实例化
对象logic实例化完成

12) BeanFactoryPostProcessor
  在BeanFactory加载Bean定义档的所有内容,但还没正式产生Bean实例之前,您可以对该BeanFactory进行一些处理,您只要实例化一个继承了org.springframework.beans.factory.config.BeanFactoryPostProcessor接口的类。
package org.springframework.beans.factory.config;
public interface BeanFactoryPostProcessor {
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

  Spring已经定义了几种实例化BeanFactoryPostProcessor接口的类。它们的功能也各不相同。下面是一些实例介绍:
  1'PropertyPlaceholderConfigurer
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations" value="classpath:com/foo/jdbc.properties"/>
</bean>
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
</bean>

jdbc.properties里的内容是:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
  Spring加载相应的bean之前,${jdbc.username}等将会被properties里相应的配置sa等值所取代。

  2'PropertyOverrideConfigurer
  调用PropertyOverrideConfigurer之后,xml配置文件的格式将可以转换为property的配置方式来实现。
<context:property-override location="classpath:override.properties"/>

//override.properties里的内容是
beanName.property=value //beanName属性值为value
dataSource.driverClassName=com.mysql.jdbc.Driver //一个叫dataSource的bean,它的driverClassName属性值是com.mysql.jdbc.Driver 
dataSource.url=jdbc:mysql:mydb
foo.fred.bob.sammy=123 //foo bean的fred属性里的bob属性里的sammy属性的值是123


13) Annotation
    当你在你的配置文件中加入以下配置:
<context:annotation-config/>

    你就可以在你的代码里使用annotation了,但你需要知道,这个而配置的背后是,你已通过此配置加载了AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor.通过它们来最终实现了annotation的功能。
    至于annotation的具体使用,其内容丰富,我们将在以后以专门的篇幅来介绍。
分享到:
评论

相关推荐

    Spring5 框架 ---- IOC容器 ---- 代码

    Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...

    Spring-ioc-jar

    这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...

    maven-spring-ioc

    **Spring IoC 框架详解** Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    这里提到的是一组完整的Spring库,包括`spring-core`、`spring-context`、`spring-webmvc`、`spring-web`、`spring-beans`、`spring-test`、`spring-jdbc`、`spring-orm`、`spring-aop`和`spring-tx`,它们都是3.2.0...

    spring-security-web源码所需jar包

    1. **spring-context-3.1.2.RELEASE.jar**:提供Spring的IoC(Inversion of Control)容器和AOP(Aspect Oriented Programming)支持,这是Spring框架的基础,为Spring Security提供了配置和事件处理能力。...

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    标题“Spring-MVC+Spring-IOC+Spring-JdbcTemple”揭示了这个项目或教程是关于如何集成并使用Spring框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...

    Spring-IOC笔记

    spring-IOC的一些笔记心得

    spring-framework-5.0.0.RELEASE-dist.zip

    Spring的核心模块提供了如IoC(Inversion of Control,控制反转)容器、AOP代理、事件传播、资源处理等功能。同时,它还可能包含Spring与其他技术的集成,如Spring JDBC、Spring ORM(对象关系映射)用于数据库操作...

    spring-framework-master

    Spring的核心设计理念是依赖注入(Dependency Injection,简称DI),它通过反转控制(Inversion of Control,IoC)来降低组件之间的耦合度。这种设计模式使得应用程序的配置和业务逻辑分离,从而提高了代码的可测试...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    Spring框架的核心是IoC(Inversion of Control)容器,它负责管理对象的生命周期和依赖关系。当需要使用CGLIB或Objenesis创建代理对象时,Spring容器会根据配置和上下文信息,动态地生成并管理这些代理对象。 6. *...

    spring-framework-1.0-with-dependencies.zip

    在Spring 1.0版本中,核心概念主要围绕IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)展开。IoC使得对象的创建和管理由Spring容器负责,而不是由代码直接创建,这样降低...

    spring-aop-5.1.0.RELEASE.jar

    spring-**cntext**-4.3.6.RELEASE.jar:spring提供了基础IOC功能上的扩展服务,提供了很多企业级服务的支持,如邮件服务,任务调度,JNDI定位,EJB集成,远程访问,缓存以及各种试图层框架的封装等。 spring-...

    官方原版完整包 spring-framework-5.3.1.RELEASE.zip

    1. **spring-core**: 提供了基础的IoC(Inversion of Control)容器,它是Spring框架的核心。IoC允许开发者通过配置来管理对象的生命周期和依赖关系,使得代码更加松耦合。 2. **spring-beans**: 支持Bean工厂和XML...

    Spring-IOC实现

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器处理,使得开发者可以更专注于业务逻辑的编写,而不是对象的生命周期管理。下面,我们将深入探讨Spring...

    Spring-4.0.3jar包

    Spring框架是Java开发中的核心组件,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。Spring-4.0.3是Spring框架的一个...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    spring-ioc学习

    spring-ioc学习 新手可以下过来学习下, spring-ioc简介

    spring 3.2.4.RELEASE jar包

    spring 3.2.4 Realease 的所有jar包: spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-...

    spring-framework-5.1.2.RELEASE.rar

    其中,有4个是Spring的基础包,对应Spring核心容器的4个模块,是Spring项目...spring-context-5.1.8.RELEASE.jar //提供在基础IoC上的扩展服务 spring-expression-5.1.8.RELEASE.jar //提供对Spring表达式语言的支持

    spring-demo02-IOC-DI案例.zip

    在这个名为“spring-demo02-IOC-DI案例”的压缩包中,我们将深入探讨这两个核心概念以及如何在实际项目中应用它们。 首先,让我们来理解什么是IOC,即控制反转。在传统的编程模式中,对象通常自行创建或管理其依赖...

Global site tag (gtag.js) - Google Analytics