Spring框架及IOC容器
Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发。Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring。
1.Spring 6个模块

Spring提供了一站式解决方案:
1) Spring Core spring的核心功能: IOC容器, 解决对象创建及依赖关系
2) Spring Web Spring对web模块的支持。
可以与struts整合,让struts的action创建交给spring
spring mvc模式
3) Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
4) Spring ORM spring对orm的支持:
可以与hibernate整合
也可以使用spring的对hibernate操作的封装
5)Spring AOP 切面编程
6)SpringEE spring 对javaEE其他模块的支持
2.引入jar文件
commons-logging-1.1.3.jar 日志
spring-beans-3.2.5.RELEASE.jar bean节点
spring-context-3.2.5.RELEASE.jar spring上下文节点
spring-core-3.2.5.RELEASE.jar spring核心功能
spring-expression-3.2.5.RELEASE.jar spring表达式相关表
3.核心配置文件
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--IOC容器的配置,要创建的所有对象都配置在这里-->
<bean id="user" class="com.juaner.spring.User" scope="prototype" lazy-init="true"/>
</beans>
4.使用Spring容器
@Test
public void test2() {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("com/juaner/spring/applicationContext.xml");
User user = (User) ac.getBean("user");
System.out.println(user);
}
5.实例化bean
bean的属性scope指定单例、多例模式。
如果为单例模式,对象在容器初始化之前创建,lazy_init可以延迟初始化到对象使用时才创建对象,支队单例有效。
如果为多例模式,对象在使用时创建。
<!--默认无参数构造器-->
<bean id="user" class="com.juaner.spring.User" scope="prototype" lazy-init="true"/>
<!--带参数的构造器-->
<bean id="user1" class="com.juaner.spring.User" scope="prototype" lazy-init="true">
<constructor-arg value="100"> </constructor-arg>
<constructor-arg value="juaner"> </constructor-arg>
</bean>
<!--使用工厂类创建对象-->
<!--工厂类实例方法-->
<bean id="factory" class="com.juaner.spring.ObjectFactory"></bean>
<bean id="user2" factory-bean="factory" factory-method="getInstance"></bean>
<!--工厂静态方法-->
<bean id="user3" class="com.juaner.spring.ObjectFactory" factory-method="getStaticInstance"/>
6.设置依赖注入(Dependency Injection)
1) 通过构造函数
2) 通过set方法给属性注入值
<bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
<bean id="userService" class="com.juaner.spring.dependencyInjection.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction">
<property name="userService" ref="userService"/>
</bean>
3) p名称空间,需要引入命名空间
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
<bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" p:userDao-ref="userDao"/>
<bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" p:userService-ref="userService"/>
4)自动装配
通过属性名查找:
<bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
<bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" autowire="byName"/>
<bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" autowire="byName"/>
通过类型查找,必须确保改类型在IOC容器中只有一个对象;否则报错:
<bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
<bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" autowire="byType"/>
<bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" autowire="byType"/>
5) 注解
引入context名称空间
xmlns:context="http://www.springframework.org/schema/context"
开启注解扫描
<context:component-scan base-package="com.juaner.spring.dependencyInjection"/>
创建对象以及处理对象依赖关系,相关的注解:
@Component 指定把一个对象加入IOC容器
@Repository 作用同@Component; 在持久层使用
@Service 作用同@Component; 在业务逻辑层使用
@Controller 作用同@Component; 在控制层使用
@Resource 属性注入
7.完整配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="employeeAction" class="cn.itcast.action.EmployeeAction" scope="prototype">
<property name="employeeService" ref="employeeService"></property>
</bean> </beans>
Spring框架及IOC容器的更多相关文章
- Spring框架 之IOC容器 和AOP详解
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Spring框架学习[IoC容器高级特性]
1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...
- Spring框架之IOC(控制反转)
[TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...
- Spring框架中IoC(控制反转)的原理(转)
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Spring之一:IoC容器体系结构
温故而知心. Spring IoC概述 常说spring的控制反转(依赖反转),看看维基百科的解释: 如果合作对象的引用或依赖关系的管理要由具体对象来完成,会导致代码的高度耦合和可测试性降低,这对复杂 ...
- 比Spring简单的IoC容器
比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...
- Spring框架(3)---IOC装配Bean(注解方式)
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
- 使用Spring.NET的IoC容器
使用Spring.NET的IoC容器 0. 辅助类库 using System; using System.Collections.Generic; using System.Linq; using ...
随机推荐
- sp工具类编写
package com.itheima.mobilesafe74.utils; import android.content.Context; import android.content.Share ...
- fragment入门
[1]在activity布局中定义fragment <?xml version="1.0" encoding="utf-8"?> <Linea ...
- 【Todo】pthread_key_t 和 pthread_once_t学习
这两个函数应该都是和线程局部变量有关的.有时间学习一下. 可以参考如下文章: <Linux线程私有数据pthread_key_t> <posix多线程有感--线程高级编程(pthre ...
- android学习---- WindowManager 接口 (
The interface that apps use to talk to the window manager. 这个接口用于与 window manager (窗口管理器, 应用框架层) 进行交 ...
- SDL2.0的VS开发环境搭建
SDL2.0的VS开发环境搭建 [前言] 我是用的是VS2012,VS的版本应该大致一样. [开发环境搭建] >>>SDL2.0开发环境配置:1.从www.libsdl.org 下载 ...
- js boolean 判断
在写项目的时候出现了一个这样的问题,虽然问题解决了,但是还是有点疑问. 在数据库中设计的表的一个字段为是否审核(is_vaild) 类型 tinyint(1) 对应的在 java中就是布尔类型(boo ...
- easyui-datebox 和easyui-datetimebox 设置默认时间当前时间
//显示当前日期 formatterDate = function (date) { var day = date.getDate() > 9 ? date.getDate() : " ...
- js用ajax和jison在不同页面的php和html之间互相传值的方法
<script> ;//这个id必须有,如果是空值,无法实现交互.有点郁闷.... var json; $.ajax({ url:"../member/wenzhanglishi ...
- 你必须知道的28个HTML5特征、窍门和技术
注意:每周有那么几次,此列表会更新一些新的窍门,最终,本文会成为超级有用的资源.//zxx:丑话说在前头,我可没功夫更新,所以,即使到您女儿出嫁那天,本文还是28项内容 前端的发展如此之迅猛,一不留神 ...
- Hibernate映射之实体映射
1.使用@注解配置实体类 实体类一般有ID.普通属性.集合属性等,分别对应数据库的主键.普通列.外键.@注解配置中,实体类用@Entity注解,用@Table指定对应的数据表,用@Id配置主键,用@C ...