Spring(二)
来源:互联网 发布:php数组最大长度限制 编辑:程序博客网 时间:2024/06/06 00:38
我们知道:
与下面这个:
是相同的意思。
1、什么是IOC容器?
依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。Spring就是一个IOC容器。他不是技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而反转是由容器来帮忙创建及注入依赖对象。反转后,真正掌握业务逻辑的是不是我们的bean对象。
2、spring中的bean配置
配置形式:基于XML文件配置的方式、基于注解的方式。
Id: Bean的名称,在IOC容器中必须是唯一的。
在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前,必须对它进行实例化。只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用。
通过ApplicationContext接口。
WebApplicationContext 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作。(Spring MVC中使用)
从IOC容器中获取Bean,调用ApplicationContext的getbean()方法。
3、三种实例化bean的方式
- 使用类构造器实例化(默认使用)
- 使用静态工厂方法实例化(简单工厂模式)
- 使用实例工厂方法实例化(工厂方法模式)
4、bean的scope属性
在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建一个唯一实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例。该作用域被称为 singleton, 它是所有 Bean 的默认作用域。<!-- Scope 的取值测试 --><!-- 如果没有指定Scope,默认值已是singleton --><bean id="scope" class="com.tz.spring.scope.Scope" scope="prototype"></bean>
5、依赖注入的三种方式
spring支持三种依赖注入的方式:
- 属性注入
- 构造器注入
- 接口注入(很少使用不推荐)
5.1 属性注入
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值属性注入是实际应用中最常用的注入方式<!-- 配置一个通过setter注入的属性值 --><bean id="helloService" class="com.tz.spring.service.impl.HelloServiceImpl"><!-- 为属性赋值 --><property name="name" value="飞杨同学"></property></bean>
5.2 构造器注入
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。构造器注入在 <constructor-arg> 元素里声明属性, <constructor-arg> 中没有 name 属性<!-- 配置一个通过构造器注入的属性值 --><bean id="hiService" class="com.tz.spring.service.impl.HiServiceImpl"><!-- 为属性赋值 --><constructor-arg value="阿忠同学"></constructor-arg></bean>扩展:
使用 <property> 元素 ref属性,引入另一个Bean对象,完成Bean之间注入。<bean id="userService1" class="com.tz.spring.service.impl.UserServiceImpl"><property name="name" value="及第同学"></property><!-- 引用外声明的list --><property name="cars" ref="cars"></property> </bean>p:<属性名>="xxx" 引入常量值
p:<属性名>-ref="xxx" 引用其它Bean对象
<bean id="userService2" class="com.tz.spring.service.impl.UserServiceImpl" p:cars-ref="cars" p:name="南笙"></bean>使用p必须引用p名称空间。
改写<property>注入为 p名称空间注入。
5.3 集合属性注入
在<list/>, <set/>, <map/>, 和<props/>元素中,也可以设置值和参数分别对应Java的集合类型List, Set, Map, 和 Properties<bean id="gather" class="com.tz.spring.entity.Gather"><property name="strVal" value="I am String"></property><property name="intVal" value="100"></property><property name="listVal"><list><value>list1</value><value>list2</value><value>list4</value><value>list5</value></list></property><property name="setVal"><set><value>set1</value><value>set2</value><value>set4</value></set></property><property name="mapVal"><map><entry key="k1" value="map1"></entry><entry key="k2" value="map2"></entry><entry key="k3" value="map3"></entry></map></property></bean>
6、延迟初始化bean(懒加载)
ApplicationContext实现的默认行为就是再启动时将所有singleton bean提前进行实例化。 通常这样的提前实例化方式是好事,因为配置中或者运行环境的错误就会被立刻发现,否则可能要花几个小时甚至几天。如果你不想 这样,你可以将单例bean定义为延迟加载防止它提前实例化。延迟初始化bean会告诉Ioc容器在第一次需要的时候才实例化而不是在容器启动时就实例化。
在XML配置文件中,延迟初始化通过<bean/>元素的lazy-init属性进行控制,比如:<!-- 测试lazy加载 false : 没有赖加载, true 表示这个Bean已经赖加载--><bean id="gatherOther" class="com.tz.spring.entity.GatherOther" lazy-init="false"></bean>
7、使用多个XML配置文件
方式一 可以在创建ApplicationContext对象时传入多个配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext("beans1.xml", "beans2.xml");
方式二 可以在配置文件中通过<import>引入其他配置文件
<import resource="classpath:bean2.xml"/>
阅读全文
0 0
- Spring(二、Spring IOC)
- spring梳理(二)
- Spring(二):异常
- Spring Security(二)
- Spring学习(二)
- Spring(二)
- 初识Spring(二)
- Spring学习(二)
- Spring(二)
- Spring基础知识(二)
- spring注解(二)
- Spring AOP (二)
- spring注解(二)
- Spring学习(二)
- Spring boot(二)
- Spring框架(二)
- Spring事务管理(二)
- Spring WebFlow(二)
- swagger完整教程。杜绝copy
- vs头文件无法include的问题
- Three.js学习
- [LeetCode] 442. Find All Duplicates in an Array
- Emmet:一个Html/Css快速编辑神器的插件
- Spring(二)
- css html 如何将图片img标签 水平居中 垂直居中 和水平垂直居中,能自适应浏览器缩放。
- Android全沉浸式的方式
- keil ucosiii工程改为 iar工程
- WebService与使用风格RPC/SOA/REST
- Python: decorator
- python基础之numpy
- 【PAT】【Advanced Level】1027. Colors in Mars (20)
- 下一代 Web 应用模型 —— Progressive Web App