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

SPRING IOC

 
阅读更多

spring在java基础上封装了资源访问,简单易用。

Resource接口 根据资源路径的不同提供了不同的实现类:

ByteArrayResource :通过二进制数组构造

ClassPathResource:类路径下的资源访问

FileSystemResource:文件系统资源访问

InputStreamResource:对应InputStream资源

ServletContextResource:web容器上下文资源

UrlResource:http,ftp资源....

 

EncodedResource 可以对资源进行编码 满足不同的资源类型读取操作

spring实现时候

new InputStreamReader(this.resource.getInputStream(), this.encoding);创建输入流的时候就会指定它的编码格式。

例子:

首先在classpath下放load.properties gbk编码

 

//FileSystemResource:文件系统资源访问

Resource fileSystem = new FileSystemResource("F:\\salmon\\WebRoot\\WEB-INF\\classes\\load.properties");

System.out.println(fileSystem.getFilename());

 

//ClassPathResource:类路径下的资源访问

 

Resource classPath = new ClassPathResource("load.properties");

System.out.println(classPath.getFilename());

 

Properties p = new Properties();

EncodedResource encRes = new EncodedResource(classPath,"gbk");

p.load(encRes.getReader());

System.out.println(p.get("salmon"));

 

以上都是通过指定具体的实现类来达到加载不同的资源目的

但是spring实现了一套资源加载接口能够通过在路径前加上区分 后统一读取资源。

 

注意:

classpath:classpath*:         ClassPathResource     

file:                                          FileSystemResource

http://                                      UrlResource

ftp:                                          UrlResource

 

classpath:classpath*:区别:像maven这样的分模块打包时候 如果出现在不同包里面出现同样前缀的资源文件  classpath:spring-*.xml  classpath*:spring-*.xml  

如果是classpath只会加载工程下面的   而 classpath*:spring-*.xml  会加载所有的包下面的。

 

 

PathMatchingResourcePatternResolver扫描不到eclipse导出来的jar包里面的配置文件

原因:导出时候没有加上导出时记得钩选"Add directory entries"

用jar命令,比较了一下两种方法打出的jar包的区别,如图: 

 

 

 

例如:PathMatchingResourcePatternResolver支持ant类型风格匹配。

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

Resource res = resolver.getResource("classpath:load.properties");

encRes = new EncodedResource(res,"gbk");

p.load(encRes.getReader());

System.out.println(p.get("salmon"));

 

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

 

BeanFactory会懒加载bean

ApplicationContext(继承BeanFactory 子类ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,AnnotationConfigApplicationContext ) 初始化时候就加载

所有单例bean缓存 protype 直接返回不再管理

 

ApplicationContext生命周期图:

 

 

 spring 通过配置文件描述bean和bean之间的依赖关系,利用java语言的反射功能实例化bean并建立bean之间的依赖关系。spring的ioc容器在完成这些底层工作的基础上还提供了bean的缓存,代理,事件发布 资源装载等高级服务。

 

循环依赖问题:

通过构造函数方式 有可能发送循环依赖,在构造对象时候互相依赖对方 造成死锁。

解决方法通过set方式注入,set互相持有引用 对象都能顺利构造出来就存在引用。 所以不存在循环依赖问题。

 

使用p命名空间:

加入 xmlns:p="http://www.springframework.org/schema/p"   //因为b-ref  a-ref这些为可变的  所以指定xsi:schemaLocation就没有意义了。

     <bean id="a" class="com.tt.test.TestA" p:b-ref="b"/>

     <bean id="b" class="com.tt.test.TestB" p:a-ref="a"/>

 

为单例注入多例的对象,因为单例只有一份 缓存在spring维护的Map中所以你没有办法没有获取到新的多例的属性,怎么办?

1.在调用多例的getXXX方法时候,重新从容器中进行获取。bean实现BeanFactoryAware接口 这样就能获取到容器对象了。

2.<bean id="me" class="XXXXXXXXXXXXXXX">

             <lookup-method name="getYou" bean="you"/>

   </bean>

这样配置的bean,getYou方法会被spring进行动态代理 代理后内部实现就像上面的一样。

 

两个没有关系的bean让他们先后实例化

<bean id="me" class="XXXXXXXXXXXXXXX" depends-on="you">

这样you这个bean一定强制先实例化后实例化me

 

几个后处理bean实现:

属性编辑器:CustomEditorConfigurer  属性customEditors 维护一个map key为类名  值 自定义属性编辑器

自定义属性编辑器: 继承PropertyEditorSupport重新setAsText 最好setValues进行设置。

 

属性占位符:PropertyPlaceholderConfigurer

<context:property-placeholder location="classpath:*****"/>

 

注解:

@Component 

@Respository  dao层

@Service         service层

@Controller     controller层

@Autowised     根据类型注入  如果加载set方法上面 那么参数会根据类型进行注入

@Qualifer("XXXX")  Autowised  注入时候如果有多个对象 可以再加上@Qualifer("XXXX")这个注解确定是哪个 同理用在方法上面

这些都是一类注解  能被context:component-scan 扫描  只是赋予了不同的意义有不同的处理比如异常

 

<context:component-scan base-package="com.test"></context:component-scan>

表示扫描com.test下面的所有类

 

<context:component-scan base-package="com.test">

   <context:include-filter type="" expression=""/>

   <context:exclude-filter type="" expression=""/>

</context:component-scan>

这里的type可以选择注解 或者正则之类的 配置很灵活 121

 

spring国际化原理:

locale的构造 语言/地址

Locale local1 = new Locale("zh","CN");//大陆

Locale local2 = new Locale("zh","HK");//香港

Locale local3 = new Locale("zh","TW");//台湾

 

 

MessageSource里面有

String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException类是的方法

定义了获取资源信息的方式 传递资源文本中定义的key 需要格式化的参数 已经本地化信息获取对应的本地化字符串

 

ApplicationContext实现了MessageSource 所以只要你持有容器的引用就能获取资源文本信息。

 

你只要配置一个名称为messageSource 的bean对象就行了

<bean id="messageSource " class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

      <property name="basenames">

             <list>

                       <value>com/test/i18n/fmt_resource</value>//fmt_resource_en_US.properties fmt_resource_zh_CN.properties .......
            </list>

     </property>

      <property name="cacheSends"  values="5"/>//秒

</bean>

 

通过容器引用调用的时候:

容器间接调用 return ctx.getBean("messageSource ").getMessage("XXXX".params,locale);

 

 

 

 

 

 

  • 大小: 211.6 KB
0
3
分享到:
评论

相关推荐

    springIoc实现原理

    **Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    实验一 Springioc基本操作.docx

    SpringIOC是Spring Framework中的核心组件之一,负责管理应用程序中的对象、依赖关系和生命周期。 在 Spring IOC 中,对象的创建和管理是通过 BeanFactory 或 ApplicationContext 实现的。BeanFactory 是 Spring ...

    spring ioc

    标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...

    Spring IoC加载流程讲解

    Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...

    SpringIoc示例代码

    Spring IOC,全称Inversion of Control,即“控制反转”,是Spring框架的核心特性之一。在传统的Java应用程序中,对象的创建和管理通常由开发者自己控制。而在Spring IOC中,这种控制权被反转,对象的创建、初始化、...

    spring ioc思维导图源文件

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一,它允许开发者将对象的创建和管理交给Spring容器来处理,从而使代码更加松耦合,更易于测试和维护。下面将详细介绍Spring IOC的基本概念、...

    SpringIOC经典Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...

    Springioc注入Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器来负责,从而实现了依赖倒置,增强了代码的可测试性和可维护性。DI(Dependency Injection,依赖注入)...

    Spring IoC依赖包

    Spring IoC,全称为Inversion of Control,即控制反转,是Spring框架的核心特性之一。它是一种设计模式,改变了传统程序中的对象创建和管理的方式,将对象的生命周期管理交由Spring容器来负责,使得代码更加解耦,...

    Spring IOC.pdf

    Spring IOC,即Spring控制反转,是Spring框架的核心特性之一。控制反转(Inversion of Control,简称IoC)是一种设计原则,用于减少代码间的耦合,提高系统模块化和代码的重用性。在Spring框架中,IOC具体体现在对...

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

    Spring Ioc 注解 依赖注入

    ### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...

    手写spring ioc(三) 资源org.zip

    在本资源"手写spring ioc(三) 资源org.zip"中,我们主要关注的是如何实现一个简易版的Spring IOC(Inversion of Control)容器,它涵盖了ioc的基本功能,包括解决循环依赖、使用构造器注入以及自动注入等核心特性。...

    模拟spring ioc过程

    在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理职责从应用代码中分离出来,交由框架来处理。这样,开发者可以更专注于业务逻辑,而不是对象的生命周期。AOP(Aspect ...

    springIOC手写框架分析

    springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...

    spring ioc模块手写demo

    spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...

    Spring IoC讲解PPT

    **Spring 的 IoC 容器** IoC(Inversion of Control)即控制反转,是 Spring 的核心特性之一。在传统的编程模式中,对象之间存在依赖关系,程序员需要手动创建和管理这些对象。而在 Spring 中,IoC 容器负责管理和...

Global site tag (gtag.js) - Google Analytics