`

二、控制反转(inverse of control IOC )

 
阅读更多

1. Bean 工厂(BeanFactory)的功能和配置

I、 ClassPathResource

l 在类路径下查找资源

l 另有 FileSystemResource

II、 XmlBeanFactory

l 读取 xml 文件中的配置信息

l 生产bean

l 解决bean 依赖

2. Bean 的创建

spring可调用bean的构造方法,或通过工厂方法生产 bean对象

I、 利用 bean 的构造方法创建bean

l 无参的构造方法(通过set方法设置,一定要有set方法)

<bean id="refName" class="com.xasxt.UserDao">

<property name="username" value="root"/>

<property name="password" value="123"/>

</bean>

l 有参的构造方法,需指明构造方法的参数列表,通过:

<bean id="refName" class=" com.xasxt.UserDao ">

<construct-arg><value>root</value></construct-arg>

<construct-arg><value>123</value></construct-arg>

</bean>

表明调用了有两个参数的构造方法

II、 通过工厂方法获得 bean对象

bean 没有公共的构造方法,需通过工厂类或工厂实例来创建

分为静态工厂和实例工厂方法两种情况

l 静态工厂方法:

class 指明工厂类,factory-method 指明工厂方法如:

Connection con=DriverManager.getConnection(url,user,pwd);

对应的配置:

<beanid="con" class="java.sql.DriverManager" factory-method="getConnection"> <construct-arg><value>jdbc:mysql://localhost/test</value></construct-arg>

<construct-arg><value>zhangsan</value></construct-arg>

<construct-arg><value>pwd</value></construct-arg>

</bean>

工厂方法参数和构造方法参数设置的形式相同

l 实例工厂方法:

要先创建工厂实例,然后再由工厂实例创建产品

如: Statement stmt = con.createStatement();

con 对象是工厂

stmt 对象是产品

配置为:

<bean id="con" class="java.sql.DriverManager" factory-method="getConnection">

……

</bean>

<bean id="stmt" factory-bean="con" factory-method="createStatement"/>

3. Bean的作用域

Bean作用域(scope属性)

作用域

描述

singleton

在每个Spring IoC容器中一个bean定义对应一个对象实例。

prototype

一个bean定义对应多个对象实例。

request

在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

session

在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

global session

在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

bean工厂生产bean 缺省都是单例的(singleton)

后两者用于web应用中

4. 通过注入解决bean的依赖

I、 依赖注入的两种方式

l set 注入

spring 直接利用了beanset或构造方法

避免了使用接口注入的侵入性

<bean id="person" class="com.xasxt.spring.Person">

<!-- set方法设置注入 -->

<property name="id" value="001"/>

<property name="name" value="zhangsan"/>

<property name="sex" value="M"/>

<property name="mari" value="false"/>

<property name="salary" value="4500"/>

</bean>

l 构造方法注入

<bean id="person" class="com.xasxt.spring.Person">

<!-- 构造方法的方式注入 -->

<constructor-arg>

<value>002</value>

</constructor-arg>

<constructor-arg>

<value>lisi</value>

</constructor-arg>

<constructor-arg>

<value>false</value>

</constructor-arg>

<constructor-arg>

<value>M</value>

</constructor-arg>

<constructor-arg>

<value>5000</value>

</constructor-arg>

</bean>

II、 依赖的目标类型分成三种形式:

l 基本类型+String

<value>data</value>

类型自动转化

l 对其他bean的引用

<bean id="prop" abstract="true"><!—只作为模板,不能被实例化-->

<property name="address" value="beijing"></property>

</bean>

<!—上面是公共属性注入,下面可以引用-->

<bean id="stu" class="com.xasxt.dependency.Student" parent="prop"><!—可以引用公共属性-->

<property name="name" value="zhangsan"></property>

<property name="code" value="01101"></property>

</bean>

<bean id="tea" class="com.xasxt.dependency.Teacher" parent="prop"><!—可以引用公共属性-->

<property name="name" value="Li Sir"></property>

<property name="job" value="java teacher"></property>

</bean>

<!-- 普通装配 -->

<bean id="c" class="com.xasxt.dependency.Class">

<property name="name" value="class One"></property>

<property name="teacher" ref="tea"></property>

<property name="stus">

<list>

<ref bean="stu"/>

</list>

</property>

</bean>

l 集合类型

Set

<property name="sets">

<set>

<value>wangso</value>

<value>haoren</value>

<value>ganka</value>

</set>

</property>

ArrayList同样设置

List

Map

<property name="map">

<map>

<entry key="aaa">

<value>7688</value>

</entry>

<entry key="bbb">

<value>9788</value>

</entry>

<entry key="ccc">

<value>8769</value>

</entry>

</map>

</property>

III、spring 自动装配bean,解决依赖

autowire属性指明自动装配的依据:

byName--- id的值=bean中的property名

byType--- 属性的类型=当前工厂中bean的类型

constructor--构造方法参数的类型=当前工厂中bean的类型

autodetect-- constructor ---> byType

autowire-candidate属性

指明是否作为 autowire 的候选对象(true或false)

解决多个候选对象的冲突

IV、 让容器检测 bean 所有的依赖是否都已经满足

防止bean的遗漏装配,在运行后出现莫名奇妙的情况,可以设置下列属性

dependency-check属性指明应检查的目标类型

simple -- 基本类型+字符串+集合

objects --- 对其他bean的依赖

all---对各类型都检查

none -- 默认值

V、 通过classpath自动扫描方式把组件纳入spring容器中管理

1、需要在文件中加入下面一句配置:

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

黄色是包名

2、还需要在各个类中加入下列注解之一:

@Service @Controller @Repository @Component

约定优于配置
分享到:
评论

相关推荐

    Java - Spring-IoC(Inverse of Control)–> 控制反转

    ① IoC(Inverse of Control)–&gt; 控制反转 IoC理念: 对象的创建工作交给IoC容器 对象间的依赖关系交给IoC容器查找,在运行期间确定 依赖注入是IoC的主要实现方式 IoC的实现机制: 工厂模式 + 反射机制:工厂模式...

    jsp编程技术复习题

    IOC(Inverse of Control控制反转):从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建...

    Spring思维导图.xmind

    Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。 提供了展现层 SpringMVC和持久层 Spring ...

    Spring学习笔记.zip

    Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring ...

    Delphi下的轻量级IoC容器 - Elite Container (Demo 0.1版)

    Elite Container是DELPHI下的一个轻量级IoC对象容器(IoC:Inverse of Control,反转控制)。它是参考了Java中的Spring框架(主要是配置文件的写法),并结合DELPHI的特点来构建的。相比Spring的对象容器,它提供的...

    SSM图书管理系统(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 Spring MVC框架:Spring MVC是基于Spring框架的Web...

    spring发展史与优势

    Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC ...

    java事务管理

    IOC容器,Inverse Of Control 控制反转。 额外: 事务管理。 对DAO的支持,主要JDBC、Hibernate、OJB。。。。。。 Mail支持,发送电子邮件 安全控制。 视图展示。(JSP、XML和XSLT、PDF、Excel) 计时服务。 整合Web...

    本项目包含弹簧通用工具(95分以上课程大作业).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    一组高质量的代码示例,如java、spring、中间件、工具等(高分项目).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    弹簧靴快速将动物园管理员与一些常用工具集成(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    开发微服务的好工具: Spring boot + Bee(高分项目).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    Eclipse集成的通用SpringSource组件,如SpringSource仪表板

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    AjiL工具套件的主页,包括Aji建模语言、Aji编辑器和Aji Spring云生成器(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    Spring Boot项目的MongoDB数据迁移工具(高分项目).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    学习J2EE ( spring、springmvc、mybatis、hibernate )

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    软件开发人员培训营(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    带弹簧启动的Kafka、Kafka和Kafka工具图形用户界面设置(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    垂直(95分以上课程大作业).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    用于获取Spring Bean依赖关系图的工具(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

Global site tag (gtag.js) - Google Analytics