文档章节

Spring容器、高级装配回顾

小峰1005419213
 小峰1005419213
发布于 2015/06/14 10:31
字数 1143
阅读 16
收藏 0

1、首先对Spring下一个定义:        

     1spring是一个容器。用于管理所有在java中声明的类。在spring中,spring所管理的所有类,叫springBean

        (只要是被spring的管理类,都叫做springbean

     2:spring是一个框架:

          Aop/di框架  面向切面的编程。Didependences injection)  依赖注入框架。

2、Spring容器介绍

        Spring的容器的特点,是通过读取spring的配置文件,实例化配置的所有类。

Spring的容器有两个:

功能

Org.springframework.BeanFactory(接口)

根容器的类,所有的spring的容器都必须是它的子类。

The root interface for accessing a Spring bean container.

Org..ApplicationContext (接口)  

上下文容器

1:是BeanFactory的子类。

2:比BeanFacotry更强大。

3:在开发时,大多都使用这个类。和它的子类:

 

  ClasspathXmlApplicationContext (具体类)

ApplicationContext的子类。

用于从classpath根目录下,读取spring的配置文件。

  FileSystemXmlApplicationContext (具体类)

ApplicationContext的子类。

用于从文件系统中,读取spring的配置文件。

3、Spring两个容器区别:

     

  BeanFactory  当用户使用SpringBean时才会实例化某个类  懒加载

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

<!-- 配置第一个springbean

spring会根据你的的配置,实例化这个类,且将这个类缓存到自己的容器中去

Person person  = new Person();//spring通过反射来实例化这个类、

将这个类缓存到自己的容器中去

map.put("person",person);

 -->

<bean id="person" class="cn.domain.Person"/>

</beans>

 

 

  applicationContext 只要是容器实例化,就会实例化所有springBean  非懒加载

4、Spring管理的bean的范围

scope

说明

Prototype

 

每一次都返回一个新的实例

原型模式。

这个对象在Spring容器实例化时,不会实例化这个对象,而是只保存这个类的字节码。当用户每一次调用

getBean()方法时,每一次都返回一个新的实例。

Request 

web环境下,

每一个request就是一个新的springBean实例

session

web环境下,

每一个session就返回一个新的springbean的实例。

Singleton  默认的形式

 

spring里,所有的springbean,默认都是单列的。

每一次调用getBean返回的都是同一个实例。

 

5、Spring装配

    5.1通过SetXxxx属性注入值。

   <bean id="person" class="cn.domain.Person">

     <!-- #{3*7}:SpEL表达式,就是在spring的配置文件中可以使用的表达式语言 -->

              <property name="age" value="#{3*7}"/>

              <property name="married">

                 <value>true</value>

              </property>

              <property name="name" value="张三"></property>

     </bean>

运行结果:

这个类被实例化了:4650724

Person [name=张三, age=21, married=true]

以上注入8大数据类型+String都可以。

     5.2注入集合类

<!--Map-->

<property name="mpp">

  <map>

      <entry key="name" value="Jack"></entry>

      <entry key="addr">

               <value>北京中国</value>

       </entry>

    </map>

</property>

<!--list-->

<property name="lt">

<list>

      <value>张三</value>

      <value>李四</value>

</list>

</property>

<!--Set-->

<property name="set">

  <set>

     <value>kkkkkk</value>

  </set>

</property>

<!--数组-->

<property name="SSS">

      <array>

            <value>DDD</value>

       </array>

</property>

<property name="DD">

<!-- properties -->

    <props>

        <prop key="name">Jack..</prop>

     </props>

</property>

6.1构造器注入---通过构造器设置值

 

public Person(String name, Integer age, Boolean married) {

      this.name = name;

      this.age = age;

      this.married = married;

      System.err.println("这是有参数的构造。。");

}

 

<bean id="person" class="cn.domain.Person">

        <constructor-arg value="Jack"></constructor-arg>

        <constructor-arg value="89"/>

        <constructor-arg value="false"></constructor-arg>

</bean>

6.2注入引用

  1:用ref引用     

<bean id="person" class="cn.domain.Person">

<!-- 引用另一个SpringBean -->

<property name="addr" ref="addr"></property>

</bean>

<!-- 声明addr的实例,没有前后的关系 -->

<bean id="addr" class="cn.domain.Addr">

<property name="tel" value="189373844"/>

<property name="zip" value="中国山东"></property>

</bean>

2、嵌入式的声明

       

<bean id="person" class="cn.domain.Person">

<!-- 引用另一个SpringBean -->

<property name="addr">

     <bean class="cn.domain.Addr">

         <property name="tel" value="189373844" />

         <property name="zip" value="中国山东"></property>

       </bean>

</property>

</bean>

6.3自动的注入

    1、byname

<bean id="person" class="cn.domain.Person" autowire="byName">

</bean>

<!-- 因为在person类中有 一个setAddr所有找名称为addrbean -->

<bean id="addr" class="cn.domain.Addr">

<property name="tel" value="189373844" />

<property name="zip" value="中国山东"></property>

</bean>

      2、byType ---如果是byType则必须要有一个唯一的对象

      3、constructotr-----有构造器,先根据参数名称,如果没有参数名称, 则按照byType

建议不用自动注入,隐藏了注入的细节,会带来性能的降低。

7.1Spring的初始化方法和销毁方法

配置通过静态的工厂方法来实例化这个类:

 

public class Car {

private Car() {

System.err.println("2:new Car...");

}

public static Car instacne(){

System.err.println("1:静态的方法。。。。");

return new Car();

}

public void init(){

System.err.println("3:初始化完成了..");

}

public void destory(){

System.err.println("4:销毁了..");

}

}

 

bean class="cn.domain.Car" factory-method="instacne"  ></bean>

下面一篇文章将专门介绍Spring的生命周期

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
小峰1005419213
粉丝 0
博文 9
码字总数 3852
作品 0
达川
高级程序员
私信 提问
SpringFramework核心技术一(IOC:详细的依赖和配置)

详细的依赖和配置 如前一节所述,您可以将bean属性和构造函数参数定义为对其他受管Bean(协作者)的引用,或者将其定义为内联定义的值。Spring的基于XML的配置元数据为此支持其元素和元素中的...

王木东
05/16
0
0
Spring_总结_04_高级配置(三)之处理歧义

一、前言 本文承接上一节:Spring总结04高级配置(二)之条件注解@Conditional 我们前面装配bean时,在Spring容器中,都是只有一个bean能匹配所需的结果。 如果有多个bean能匹配结果的话,Spr...

shirayner
08/06
0
0
Spring中Beans的自动装配概述

以下内容引用自http://wiki.jikexueyuan.com/project/spring/beans-autowiring.html: 在之前的做法上会参照这样的顺序:1、使用元素声明bean,2、并使用XML配置文件中的和元素注入。但现在可...

easonjim
2017/05/22
0
0
《Spring5学习》 01 装配Bean之自动化装配

Spring的自动化装配就便利性方面远远优于其他装配方法,这也是业界目前主要采用的Bean装配机制。Spring基于组建扫描和自动装配实现自动化装配,能将用户的显示配置降到最低。以下通过一段代码...

老韭菜
08/05
0
0
细说不懂Spring底层原理带来的伤与痛

什么是spring? Spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为...

老道士
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
14
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
19
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
19
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
9
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部