文档章节

Spring容器、高级装配回顾

小峰1005419213
 小峰1005419213
发布于 2015/06/14 10:31
字数 1143
阅读 14
收藏 0
点赞 0
评论 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
达川
高级程序员
Spring中Beans的自动装配概述

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

easonjim ⋅ 2017/05/22 ⋅ 0

SpringMVC+Spring事物失效问题

1、spring扫描配置 springmvc扫描配置导致事物失效 一个项目中既有SpringMVC又有Spring 的时候,会发生事物失效问题 原因:使用的spring注解+springMVC注解,默认情况下spring应该先加载appli...

宿小帅 ⋅ 2016/10/12 ⋅ 0

Spring温故而知新 - bean的装配

按条件装配bean 就是当满足特定的条件时Spring容器才创建Bean,Spring中通过@Conditional注解来实现条件化配置bean package com.sl.ioc;import org.springframework.context.annotation.Bean;...

Java-老刘 ⋅ 05/07 ⋅ 0

Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y ⋅ 05/22 ⋅ 0

关于SpringBoot父子容器加载Bean的问题

Spring容器优先加载由ServletContextListener(对应applicationContext.xml)产生的父容器,而SpringMVC(对应mvcdispatcherservlet.xml)产生的是子容器。子容器Controller进行扫描装配时装...

孟德宣 ⋅ 05/19 ⋅ 0

项目中SpringMVC、Spring和Struts的区别讲解

导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用过SSH,这里主要是区分一下SpringMVC和Struts,但是由于SpringMVC和Spring真的也挺容易迷糊的,所以,...

yiguang_820的博客 ⋅ 2017/12/11 ⋅ 0

spring boot源码分析之springmvc(上)

相对于spring boot我们使用spring mvc更加频繁和熟悉。sprint boot具有spring mvc的功能,两者之间到底存在着什么样的关系,通过下面的篇幅我们一起来分析。 我们再回顾下spring mvc的配置,...

帅帅的波 ⋅ 2017/09/09 ⋅ 0

详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship ⋅ 04/22 ⋅ 0

Spring3.x事务失效的原因以及解决办法

项目中如果使用spring来管理事务,可能会出现事务失效的情况,我认为主要的原因是cglib无法获取到代代理的实例。。 如果带上事务,那么用annotation方式的事务注解和bean配置,事务会失效,要...

翊骷 ⋅ 2014/08/22 ⋅ 0

Spring系列之Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么...

HJCui ⋅ 05/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

apollo配置中心的学习笔记

公司现在配置文件太多了,导致配置文件修改起来还是非常麻烦的。在boss(业务运营支撑系统)中,配置文件是存放在jar包的,通过应用jar包来引用配置文件(区分不同环境)。这种方式虽然能够满足...

miaojiangmin ⋅ 3分钟前 ⋅ 0

Jena增删改查AP

插入、更新数据 public static void insert(){ String query = "PREFIX book: <http://www.book.com/jinyong/> \n" + " INSERT DATA \n" + ......

Vincent-Duan ⋅ 4分钟前 ⋅ 0

springMVC之与json数据交互方法

因为我也要返回json数据。所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意: 1、@RequestBody不能省,因为前台发过来的数据是json数据,得用这个注解去解析该怎么接收这些数...

颖伙虫 ⋅ 8分钟前 ⋅ 0

用实例域代替序号(31)

1、许多枚举天生就与一个单独的int 值相关联 ordinal 方法,返回枚举常量在类型中的数字位置 下述,枚举修改很不方便,不好维护 永远不要根据枚举的序数导出与他相关联的值 而是将他保存在一...

职业搬砖20年 ⋅ 10分钟前 ⋅ 0

并发编程---ConcurrentHashMap源码解析

ConcurrentHashMap是java中为了解决HashMap不能支持高并发而设计的新的实现。 ConcurrentHashMap的类结构 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements C......

千古一梦888 ⋅ 13分钟前 ⋅ 0

微服务 WildFly Swarm 简介

我们将看到的最后一个Java微服务框架是一个相对较新的场景,它利用了 JBoss WildFly 应用服务器中已试过且受信任的 JavaEE 功能。WildFly Swarm 是 WildFly 应用服务器的一个完整的拆下来的组...

woshixin ⋅ 18分钟前 ⋅ 0

android apk 瘦身

头条APK瘦身之路 随着版本迭代,功能增加安装包体积也会慢慢增大。 今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。 ...

GoldenVein ⋅ 21分钟前 ⋅ 1

mac机器学习开发环境部署及helloworld

一、下载并安装Anaconda2.7 https://repo.anaconda.com/archive/Anaconda2-5.2.0-MacOSX-x86_64.pkg 路径:/Users/shijun/anaconda2 二、运行Anaconda Navigator -> Environments -> base(ro......

八戒八戒八戒 ⋅ 33分钟前 ⋅ 0

关于日常开发的经验总结(Java),持续更新中

常量尽量使用枚举来表示,这样表现力会很强,因为枚举比一个常量类要有更多的扩展性 方法的入参和出参尽量不要使用Map,因为Map会让调用者感到迷惑,他不知道你里面装的什么,面向对象的开发...

小99 ⋅ 33分钟前 ⋅ 0

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 33分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部