Spring学习IoC控制反转(一)
来源:互联网 发布:模型和算法的区别 编辑:程序博客网 时间:2024/06/04 19:08
本节的重点内容:
1,通过ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext 读取spring 配置文件
2,BeanFactory 和 ApplicationContext 区别
3,理解IoC 和 DI 概念
4,Bean三种实例化方式 (无参数构造器 重要)
5,Bean范围 singleton 和 prototype
6,依赖注入属性 构造器属性注入、setter属性注入 (setter是重点)
7,引入多个XML配置文件
8,spring注解使用 @Autowired @Resouse @Controller @Service @Repository
一,
学习三大框架 Java体系结构分为三层,将服务器程序分为三层(web层,业务层,持久层)
其中 struts2 web层,hibernate 持久层,speing业务层
spring的出现是为了取代EJB的臃肿,而且spring提供web层,业务层 ,持久层各层的技术!
二,
使用spring的好处:
1,所有对象的创建和维护都交给spring管理,spring就相当于一个大工厂,实现于程序的解耦;
2,AOP面向切面编程,底层使用的代理模式;
3,spring的声明式事务处理;
4,spring完美与junit4整合;
5,提供大量的模板和工具类;
三:
使用spring创建web工程的步骤:
导入jar : 每个spring工程都必须使用核心包 四个
(1),spring-expression-3.2.0.RELEASE.jar
(2)spring-core-3.2.0.RELEASE.jar
(3)spring-context-3.2.0.RELEASE.jar
(4)spring-beans-3.2.0.RELEASE.jar
Spring框架运行 必须依赖 apache 提供 commons-loggings
整合log4j 直接导入log4j 在src下创建log4j.properties
四:
使用spring最强大的功能有两个
1,IoC 控制反转,把创建和实例化bean的权力交给spring管理,其中实例化类中的构造依赖属性可以通过配置注入(DI依赖注入)
2,AOP 面向切面编程
五:
1,spring的配置文件可以放到src下,也可以放到WebRoot下,一般都叫application.xml ,但也不固定
因为spring完美和junit4结合,所以你可以很轻易在编程中间测试你的配置和编写是否正确
2,(1)加载src下的spring配置文件方式
@Test
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获得交给spring管理的类,此方法就相当于 Xxx xxx = new Xxx();但是通过spring获得的是Xxx的代理对象
applicationContext.getBean("Xxx");
(2)记载WebRoot下的spring配置文件方式
@Test
ApplicationContext applicationContext =new FileSystemXmlApplicationContext("applicationContext.xml");
3,ApplicationContext是BeanFactory的子接口并且对BeanFactory 做了一些扩展,建议用ApplicationContext
六:
1, Bean装配 (Xml配置方式)Bean有三种实例化方式(第一种最常用)
(1),<bean id="" class="" /> 采用反射调用bean的无参数构造方法实例化对象 Class.forName("bean").newInstance() ;
(2),<bean id="" class="工厂" factory-method="方法"/> 由工厂static方法 提供Bean实例
<!-- 第二种 静态工厂方法 --> <bean id="bean2" class="cn.itcast.factory.MyBeanFactory" factory-method="createBean2"></bean>
// 提供Bean2 实例 --- 静态方法public static Bean2 createBean2(){return new Bean2();}
(3)
<!-- 第三种 实例工厂方法 --> <!-- 实例化工厂 -->
<bean id="factory" class="工厂" /> 工厂会通过无参数构造器实例化
<bean id="" factory-bean="factory" factory-method="方法" /> 通过工厂实例方法 创建Bean实例
<!-- 第三种 实例工厂方法 --> <!-- 实例化工厂 --> <bean id="mybeanFactory" class="cn.itcast.factory.MyBeanFactory"></bean> <bean id="bean3" factory-bean="mybeanFactory" factory-method="createBean3"></bean>
// 提供Bean3 实例 --- 实例方法,工厂需要实例化public Bean3 createBean3(){return new Bean3();}2,Bean作用域 配置 <bean scope="" >
singleton 单例 ---- 整个容器中只有一个实例
prototype 多例 ---- 每次调用Bean 创建一个新的实例
** 单例 在 new ApplicationContext 时构造,多例 在getBean时 构造
3,(DI)依赖注入bean属性的方式
(1),构造器注入
<bean>
<constructor-arg> 完成构造器参数注入
* 推荐使用构造参数下标索引 完成注入 <constructor-arg index="0" value="宝马"></constructor-arg>
* 如果存在 多个构造器 参数个数相同的,结合类型完成注入 <constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>
(2),setter方式注入(重点)
<bean>
<property> 完成属性setter注入
*<property name="" value="" /> 注入普通值属性
* <property name="" ref="" /> 注入另一个Bean
将一个Bean注入给另一个Bean 意义? Action 中使用Service,将Service注入到Action , Service中使用DAO ,将DAO注入Service
4,Spring容器中,配置Bean之间的关系
1) 父子Bean : 当需要在Spring容器中 多次使用同一个Bean数据,依赖注入数据不同,引用父子Bean ,将公共属性放入父Bean,在子Bean中留下个体属性
// 父bean
<bean id="cat" class="cn.itcast.domain.Cat" abstract="true">
<property name="address" value="北京"/>
</bean>
// 子bean
<bean id="cat1" parent="cat" >
<property name="name" value="黑猫警长" />
</bean>
<bean id="cat2" parent="cat" >
<property name="name" value="白鸽探员" />
</bean>
2) 依赖Bean: 一个Bean实例化之前,必须先将另一个Bean 实例化接收 (依赖另一Bean实例化一些数据)
<bean id="a" class="....A" />
B实例化前,必须先将 A实例化
<bean id="b" class="....B" depends-on="a"/>
七:
使用多个XML配置spring框架的配置文件
方式一:将配置分解为多个配置文件
new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");
方式二: 将配置分解为多个配置文件 applicationContext.xml applicationContext2.xml (推荐)
在一个文件中通过 <import> 引入其他配置文件
<import resource="classpath:applicationContext2.xml"/>
new ClassPathXmlApplicationContext("applicationContext.xml"); // 自动引入另一个配置文件
八:
使用注解方式装配Bean
(1),要想使用注解,首先需要在application.xml中配置一些支持注解的东东
** 采用注解配置bean 需要使用 beans context 名称空间
<!-- 使用Spring注解配置 --> <context:annotation-config></context:annotation-config> <!-- 通知Spring框架,应用注解类在哪个包 --> <context:component-scan base-package="cn.zfx.beans"></context:component-scan>(2),@Repository 用于DAO
@Service 用于Service
@Controller 用于控制器
(3),自动装配Bean (Bean属性的依赖注入) @Autowired //@Resource 功能和 @Autowired 一样
@Autowired //@Autowired 有 required属性,默认值true, 必须完成装配,否则 异常
private UserDAO userDAO; // 连setter方法都不需要 ,就可以完成注入(4),篇日志Bean的范围
@Scope(value="prototype") 多例,每次getBean 创建新的实例
@Scope(value="singleton") 单例,容器只会实例化对象一次
九:
在web中使用spring
(1),1、需要导入额外jar包 : spring-web-3.2.0.RELEASE.jar
ContextLoaderListener 监听器默认 WEB-INF/applicationContext.xml
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> Spring框架核心配置文件位置<context-param> <param-name>contextConfigLocation</param-name> <!-- 指定配置文件位置 --><!-- <param-value>/WEB-INF/applicationContext2.xml</param-value> --> <param-value>classpath:applicationContext1.xml</param-value></context-param>(2),在程序中获得WebApplicationContext对象
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
- Spring学习IoC控制反转(一)
- Spring IoC(控制反转)【一】
- Spring框架(一)--IOC控制反转
- SSH专业课学习(一)spring的IOC(控制反转)
- Spring3.0学习札记一Spring IOC控制反转(1)
- Spring3.0学习札记一Spring IOC控制反转(2)
- Spring3.0学习札记一Spring IOC控制反转(3)
- Spring3.0学习札记一Spring IOC控制反转(4)
- Spring IoC(控制反转)
- Spring IoC(控制反转)
- Spring学习(6)Spring核心思想 控制反转Ioc
- 开源框架Spring学习之道:IoC控制反转(一)
- Spring初学(一)IOC控制反转注入
- Spring配置过程(一)反转控制/依赖注入IOC
- 关于Spring IOC控制反转一
- Spring学习笔记(七):IOC控制反转
- Spring 框架学习—控制反转(IOC)
- Spring 框架学习—控制反转(IOC)
- 繁华落幕,各安天涯
- 数组与指针
- 工作不好找那就参加Java培训吧
- 参加广州传智播客PHP培训应对就业最难季
- 参加.Net培训开辟人生新道路
- Spring学习IoC控制反转(一)
- windows环境使用python google protobuf
- FastStone Capture 7.7 截图工具下载地址及使用
- 广州传智播客网页平面学员感想
- IOS7.1下使用AdHoc方法下载的解决方案
- ADO.net入门(二)快快乐乐走婆家(连接到数据库)
- Flume 收集Nginx日志到Hdfs Tail-to-hdfs sink
- 什么是GNU?
- MVC Razor 语法