标签:高内聚 framework cto ane 覆盖 session 自身 面向 没有
一、Spring 概述二、Spring IOC
专题一 IOC
-接口及面向接口变成
-什么事IOC
-Spring的Bean配置
-Bean的初始化
两个包 1.org.springframework.beans org.springframework.context
BeanFactory 提供配置结构和基本功能,加载并初始化Bean
ApplicationContext 保存了Bean对象并在Spring中被广泛使用
ApplicationContext
-本地文件 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/worksapace/application.xml");
-Classpath ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("calsspath:spring-context.xml");
-Web应用中依赖servlet或Listener
spring 容器 加载 ioc
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
spring MVC 加载 ioc 可以不使用spring 容器
<servlet>
<servlet-name>seckill-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>seckill-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
-Spring的常用注入方式
1.IOC控制反转:控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器(Spring Container或者 Spring MVC 子容器)
负责创建和维护
-到底哪些方面的控制被反转了呢:获得依赖对象的过程被反转了 控制被反转之后,获得依赖对象的过程由自身管理变为由IOC容器主动注入
依赖注入:就是IOC容器在运行期间,动态的将某种依赖关系注入到对象之中
2.DI依赖注入 是一种实现方式
目的:创建对象并且组装对象之间的关系
特点:不关心对象的创建 只去使用
3.Spring 注入
-spring 注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
-常用的两种注入方式
1、设值注入 就是set 通过xml配置文件进行设置
<bean id="injesctionService" class="org.seckill.dao.injection.service.InjectionServiceImpl">
<property name="injectionDao" ref="injectionDao"/>
</bean>
<bean id="injectionDao" class="org.seckill.dao.injection.dao.InjectionDaoImpl"/>
2、构造注入
<bean id="injesctionService" class="org.seckill.dao.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDao" ref="injectionDao"/>
</bean>
<bean id="injectionDao" class="org.seckill.dao.injection.dao.InjectionDaoImpl"/>
三、Spring Bean
-Bean 配置项
id:在整个ioc容器中这个bean的唯一标识
class:具体要实例化的哪个类
scope:范围
-singleon:单例,只一个Bean容器照片那个只存在一份
-protoptype:每次请求(每次使用)创建新的实例,destroy方式不生效
-request:每次http请求创建一个实例且尽在当前request内有效
-session:每次http请求创建一个实例且尽在当前session内有效
-global session:基于portlet的web中有效(portlet定义了 global session) 如果在web中,同session
constructor arguments:
Properties: 属性
Autowiring mode:自动装配模式
lazy-initialization mode:懒加载模式
Initialization/destruction method 初始化 和销毁的方法
-Bean 作用域
-singleon:单例,只一个Bean容器照片那个只存在一份
-protoptype:每次请求(每次使用)创建新的实例,destroy方式不生效
-request:每次http请求创建一个实例且尽在当前request内有效
-session:每次http请求创建一个实例且尽在当前session内有效
-global session:基于portlet的web中有效(portlet定义了 global session) 如果在web中,同session
-Bean 生命周期
1-定义
2-初始化
-实现org.springframework.beans.factory.InitalizingBean接口,覆盖afterPropertiesSet方法
Public class RedisDao implements InitalizingBean{
@Override
public void afterPropertiesSet() throws Exception{
}
}
-配置 init-method
<bean id="redisDao" class = "org.seckill.dao.RedisDao" init-method="init"/> 该类里面有个init()方法 会自动执行在创建该类时候
3-使用
4-销毁
-实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法
Public class RedisDao implements InitalizingBean{
@Override
public void destroy() throws Exception{
}
}
-配置 init-method
<bean id="redisDao" class = "org.seckill.dao.RedisDao" destroy-method="destroy"/> 该类里面有个destroy()方法 会自动执行在创建该类时候
总结
1,默认全局的初始化和销毁方法;
2,实现接口的初始化和销毁方法;
3,配置文件中配置初始化和销毁方法;
这三个方法同时使用时,1默认的则不执行,而23两种都会执行,并且是2实现接口的方式先于配置中3的执行。
1默认的全局初始化和销毁方法可以有可以没有,有没有对配置都没有太大影响,当然如果一个bean没有采取23初始化销毁方法,
而有1默认的方法的话,这两个方法还是会执行的。即使没有,系统也不会报错。
-Bean 自动装配(Autowiring)
-No:不做任何操作
-byname:根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并肩器与属性自动装配
<bean id="dao" class="com.etoak.dao.DaoImpl"></bean>
//此类中有 封装的属性值 和其set方法
//或者可以通过 表头的命名空间进行配置 default-autowrie="byBane" 其他都不默认配置了
<bean id="action" class="com.etoak.action.LoginAction" init-method="init">
<property name="di" ref="dao"></property>
</bean>
-byType:如果容器中存在一个与指定属性类型相同的bean,那么将于该属性自动装配;如果存在多个该类型bean,那么抛出异常
并指出不能使用byType方式进行自动装配,如果没有找到相匹配的bean,则是么事都不发生
-Constructor:与byType方式类似,不同之处在于他应用于构造器参数如果容器中没有找到与构造器参数类型一直的bean,抛出异常
-Resources&ResourceLoader
Resources 支队于资源文件的统一接口
-UrlResource:URL对应的资源,根据一个URL地址即可构建
-ClassPathResource:获得类路径下的资源文件(也即是classpath下的)
-FileSystemResource:获取文件系统里面的资源
-ServletContextResource:ServletContext封装的资源,用于访问ServletContext环境下的资源(web相关的)
-InputStreamResource:针对输入流封装的资源
-ByteArrayResource:针对于地接数组封装的资源
ResourceLoader 加载资源的 所有的applicationContext都实现了该接口 都可以获取Resource实例
public interface ResourceLoader{
Resource getResource(String location);
}
图
开始图
1.bean 类 实现ApplicationContextAware 所有的applicationContext都实现了该接口 都可以获取Resource实例
applicationConext.getResource();有4中
测试类
-Aware 这个暂时忽略 没用到过(上面再实现Resource时候就是用Aware)
-Spring 中提供了一些以Aware结尾的接口,实现了Aware接口的bean在初始化之后,可以获取相应的资源
-通过Aware接口,可以对Spring想用资源进行操作(一定要慎重)
-为对Spring进行简单的扩展提供了方面的入口
-ApplicationContextAware 实现了此接口的类会提供 spring contxt 上下文的信息 实现类必须配置到spring的配置文件中去(bean容器加载)
-BeanNameAware 同上
标签:高内聚 framework cto ane 覆盖 session 自身 面向 没有
原文地址:http://blog.51cto.com/12941821/2062185