Spring总结笔记(一)

Spring简介
概述 : 基于JAVA的轻量级J2EE(一站式)应用框架
应用 : 应用于J2EE开发的各个层面(表现层, 业务层 , 数据层)
两大核心
IOC : 控制反转
AOP : 面向切面编程


Spring系统架构
概述 : Spring是一个整合的平台 , 可以将很多的技术整合在一起使用 ,使每个组件发挥其最大功效
架构
核心容器 : Core Container
数据访问/集成 : Data Access/Integration
Web
AOP
Test


Spring依赖的jar包
核心jar : core , beans , context , expression
日志jar : commons-logging(apache) , log4j


IOC(Inversion of Control) 控制反转
基本概念
概述 : 资源由Spring创建、管理并注入给需要的应用程序或对象
优势 : 资源由Spring统一调度,统一管理,使对象的控制更加集中,避免应用程序中出现多余的对象,浪费资源
IOC基础
1). 创建工程 , 导入spring 的 jar包
2). 创建配置文件 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"
  xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


</beans>
3). 将资源以bean的形式配置在spring的配置文件中
4). 通过spring的执行程序获取bean进行操作
5). 获取spring的通用工厂
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml")(常用)
ApplicationContext context = new FileSystemXmlApplicationContext ("applicationContext.xml")(了解)


DI(Dependency Injection)依赖注入
概述 : 为应用程序提供所依赖的资源的过程 , 称为依赖注入; 应用程序被动等待Spring为其注入资源
setter注入
简单对象 (基本类型,封装类, String)  : <property name="" value=""/>
实体对象 : <property name="userService" ref="userService"/> , ref属性引用spring容器中的bean的id
IOC与DI的关系
针对Spring而言:Spring反向控制(IOC)应用程序需要使用的外部资源
针对应用程序而言:应用程序依赖Spring为其注入(DI)运行所需的资源


BeanFactory接口(了解)
使用BeanFactory获取spring中的bean
1). Resource resource = new ClassPathResource("applicationContext.xml");
2). BeanFactory bf = new XmlBeanFactory(resource );
3). UserService service = (UserService) factory.getBean("userService");
ApplicationContext是BeanFactory的子接口
BeanFactory与ApplicationContext区别
加载方式
BeanFactory:延迟加载,使用bean时才进行初始化
ApplicationContext:加载配置文件时,初始化bean对象 (延时加载的bean的属性里加lazy-init="true")
功能 : ApplicationContext又实现了其他的接口, 具有更为丰富的功能(国际化, 自动装配 ...)
ApplicationContext的常用实现类
FileSystemXmlAppliCationContext 根据文件路径获取
ClassPathXmlApplicationContext  根据类路径获取


Bean实例化的三种方式
无参数构造
静态工厂
1). 创建静态工厂类
2). 配置 : <bean id="bean2" class="cn.itcast.spring.xml.init.Bean.Bean2Factory"  factory-method="getInst"></bean>
class:配置工厂类的全路径名   factory-method:配置工厂类获取实例的静态方法名
实例工厂
1). 创建静态工厂类
2).  <bean id="bean3Factory" class="cn.itcast.spring.xml.init. Bean3Factory"></bean>
3). <bean id="bean3"  factory-bean="bean3Factory" factory-method="getInst"></bean>


bean的作用域(scope)
配置 : 在bean中的scope属性中配置 , 默认单例(singleton)
scope的属性值
singleton(默认)(常用) : 创建出的实例为单例模式,在IoC容器中唯一
prototype(常用) : 创建出的实例为非单例模式,每次获取bean得到新对象
request(用于web开发) : 创建的实例绑定request对象,获取的bean作为request的属性
session (用于web开发) : 创建的实例绑定session对象,获取的bean作为session的属性


bean的生命周期
生命周期的过程(了解)
1). instantiate bean对象实例化
2). populate properties 封装属性
3). 如果Bean实现BeanNameAware执行setBeanName
4). 如果Bean实现BeanFactoryAware或ApplicationContextAware设置工厂setBeanFactory或上下文对象setApplicationContext
5). 如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessBeforeInitialization
6). 如果Bean实现InitializingBean执行afterPropertiesSet
7). 调用自定义的init-method方法
8). 如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitialization
9). 执行业务处理
10). 如果Bean实现DisposableBean执行destroy
11). 调用自定义的destroy-method
需要关注
1). 增强bean的功能可以使用后处理Bean,BeanPostProcessor
2). 如果需要初始化或销毁操作我们可以使用init-method  destroy-method


bean的属性注入 .
构造器注入(了解) 
1). 为bean提供对应的构造器
2). 配置: <constructor-arg index="..." type="..."  value="..."></constructor-arg>
setter注入(重要)
简单对象 (基本类型,封装类, String)  : <property name="" value=""/>
实体对象 : <property name="car" ref="car"/> , ref属性引用spring容器中的bean的id


集合注入
List
<property name="country">
<list>
<value>中国</value>
<value>美国</value>
<value>韩国</value>
<value>法国</value>
</list>
</property>
数组
<property name="arr">
<array>
<value>9</value>
<value>1</value>
<value>8</value>
</array>
</property>
Set
<set>
<value>Tom</value>
<value>Jerry</value>
<value>汤姆</value>
<value>杰瑞</value>
<!-- <ref bean="bean名称"/> -->
</set>
Map
<property name="map">
<map>
<entry key="SINA" value="新浪"/>
<entry key="BAID" value="百度"/>
<entry key="NQ" value="网秦"/>
</map>
</property>


或 


<property name="map">
<map>
<entry>
<key>
<value>SINA</value>
</key>
<value>新浪</value>
</entry>
<entry>
<key>
<value>BAID</value>
</key>
<value>百度</value>
</entry>
</map>
</property>
Properties
<property name="propes">
<props>
<prop key="ZSF">张三丰</prop>
<prop key="ZWJ">张无忌</prop>
<prop key="ZZR">周芷若</prop>
</props>
</property>


P/C命名空间支持(了解)
P名称空间(property 属性注入)
1). 在约束信息中加入使用命名空间p  xmlns:p="http://www.springframework.org/schema/p"
2). bean的配置  简单属性格式: p:<属性名>=“属性值”  引用属性格式: p:<属性名>-ref=“bean名称”
C名称空间(constructor 构造器注入)
1). 在约束信息中加入使用命名空间c   xmlns:p="http://www.springframework.org/schema/p"
2). bean的配置   简单属性格式: c:<属性名>=“属性值”  引用属性格式: c:<属性名>-ref=“bean名称”


SpringEL表达式格式(了解)
所有格式统一使用  value=“ . . . ”
常量 : #{10}  #{3.14}  #{2e5}  #{'itcast'}
引用Bean : #{beanId}  
引用Bean属性 : #{beanId.propertyName}
引用Bean方法 : beanId.methodName().method2()
引用静态方法 : #{T(java.lang.Math).PI}
T() 运算符的作用就是调用静态方法
运算符支持 : #{3 lt 4 and 4 ge 3}
集合支持 : #{likes[3]}


Spring注解 
注解开发bean
1). 添加spring-context的命名空间
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd
2). 注解扫描路径配置 : <context:component-scan base-package="cn.itcast.spring"/> , <context:annotation-config />(可以省略)
3). bean的注解
@Component : 指定对应的类为Spring控制的bean
@Repository : 用于对数据层实现类进行标注
@Service : 用于对业务逻辑层实现类进行标注
@Controller : 用于对控制层实现类进行标注
注解开发属性注入
@Autowired : 标注类的成员变量为自动装配注入属性  
属性required  
true : 注入失败时候抛出异常
false : 不做校验 , 注入失败则就是null
简单类型:@Value , 该注解与@Autowired配合使用
@Autowired //自动装配
@Value("100") //注入简单类型
private Integer pageNum;
对象类型 : @Qualifier ,  该注解与@Autowired配合使用
@Autowired(required=false) //自动装配默认按照类型进行装配
@Qualifier("userService") //注入引用类型,要求制定bean的名称
private UserService userService;
注意 : @Qualifier必须给出注入的bean的名称 ; 如果对应的bean不存在,抛出异常,注入失败


自动装配注意事项
注入类型class
1). 如果类名对应的类只有一个,注入成功
2). 如果类名对应的类有多个,注入失败
注入类型interface
1). 如果不存在对应接口的实现类,注入失败
2). 如果对应接口的实现类为一个,注入成功
3). 如果对应接口的实现类为多个,注入失败
4). 如果对应接口的实现类指定有bean名称
如果存在对应名称的自动装配bean,注入成功
如果不存在对应名称的自动装配bean,注入失败


@Resource完成自动装配
@Resource与@Autowired功能非常相似,用于bean的自动装配,格式略有区别 ; 如: @Resource("userService")


生命周期控制方法与bean的作用范围
bean的作用范围 : @Scope("prototype")
生命周期
@PostConstruct : 为当前Bean指定init-method参数
@PreDestroy : 为当前Bean指定destory-method参数


@Bean的支持性(了解)
1). @Bean : 指定当前方法返回的对象为指定名称spring控制的Bean
2). @Configuration : 指定当前类为配置类,用于加载Bean定义
@Configuration
public class SpringConfig {
@Bean(name="aa") //定义了一个spring的bean
public UserAction getInst(){
return new UserAction();
}
@Bean(name="bb")//通过静态工厂定义一个spring的bean
public static UserAction getInst2(){
return new UserAction();
}
}
3). AnnotationConfigApplicationContext对象手动加载
//免配置文件格式
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
//通过注册的形式将定义的bean加载到AnnotationConfigApplicationContext上下文对象中
ctx.register(SpringConfig.class);
ctx.register(UserAction.class);
//注册完毕后,重新加载一下上下文对象(刷新)
ctx.refresh();


Junit整合Spring
1). 加入jar包 spring-test-3.2.0.RELEASE.jar
2). 设置类运行器 @RunWith(SpringJUnit4ClassRunner.class) (该注解使用在类上)
3). 加载spring的配置文件@ContextConfiguration(locations="classpath:applicationContext.xml")


web开发中的应用
1). 加入spring-web-4.2.4.jar
2). 在web.xml中配置 org.springframework.web.context.ContextLoaderListener
3). xml中配置contextConfigLocation参数 , 加载spring配置文件
4). 获取ApplicationContext : (ApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
5). 获取ApplicationContext的方式二 : WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一课:面向抽象编程 4 第二课:Jdom的基本使用 4 第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope、@PostConstruct、@PreDestroy 19 六、 注解对应的jar包 19 第七课:AOP(面向切面编程) 19 一、 AOP概念 19 二、 利用动态代理实现面向切面编程 20 第八课:Spring AOP配置选项 21 一、 AOP配置annotation方式 21 (一) 搭建annotation开发环境 21 (二) aspectJ类库 22 (三) AOP的annotation实例 22 (四) AspectJ的专业术语 23 (五) 织入点语法 23 (六) Advice 24 (七) Pointcut 26 (八) annotatin方式的AOP实例 26 二、 AOP配置xml方式 27 三、 AOP实现动态代理注意 28 第九课:DataSource 28 一、 Sping配置数据源: 28 二、 注入使用 29 三、 dbcp.BasicDataSource 29 第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar 31 (二) 加入annotation功能的jar包 31 (三) 搭建日志环境并配置显示DDL语句jar包 31 三、 Spring整合hibernate3事务 31 (一) Annotation注解方式配置事务管理 31 (二) Spring事务选项 35 (三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值