Spring框架
---恢复内容开始---
Spring框架:Spring框架的核心
代理模式,AOP,JDBC支持
Spring事务管理
Spring与Mybatis整合
传统开发模式
基于项目框架架构:entity/dao/service/action
1、实体类 class user{}
2、dao class userdao{
访问数据库}
3、Service class UserService{
UserDao userdao=new……();
}
4、action class userAction{
UserService userservice=new ……();
public void setUserService(UserService userservice){
this.userservice=userservice;
}
//由别人来创建:控制反转
}
用户访问:user.action--->Tomcat(服务器创建Action,Service,dao)
思考:1、对象创建创建能否写死
2、对象创建细节,对象的个数?创建的时间
3、对象之间的依赖
总结:Spring解决对象的创建,以及对象依赖关系管理
Spring框架:了解专业术语
组件/框架设计:侵入式:对现有的类的结构有影响,需要实现或继承
非侵入式:对现有的类的结构没有影响
控制反转(IOC):对象的创建交给外部容器完成,叫控制反转
依赖注入(DI):处理对象的依赖关系(set注入)
区别:控制反转,解决对象的创建问题
依赖注入:在创建完对象之后,对象的关系的处理(set方式注入)
Aop:面向切面编程
概述:Spring框架,是解决对象创建以及对象之间的依赖关系的一种框架(可以与其他框架一起使用mybatis,hibernate)
作用:整合
Spring提供一站式解决方案:1、Spring core:Spring核心功能,IOC容器
2、Spring WEB:对WEB模块支持
3、Spring DAO:对于jdbc支持
4、Spring ORM:对ORM支持
5、SpringAOP:切面编程
6、Spring对JavaEE的其他模块的支持
快速入门:1、导入相应的jar包:benas,context,core,expression,commons-logging
IOC容器配置:所有需要用到的类
IOC创建对象的细节:对象的个数,对象创建的时机
2、核心配置文件:applicationContext.xml
1、对象创建:单例、多例(设置Scope属性)
scope=“singleton”,默认值:单例
scope=“prototype”,多例
2、什么时候创建
scope=“prototype”在使用到对象时,才能创建对象
scope=“singleton”在启动(容器初始化之前),创建bean整个应用只有一个类
3、是否延迟创建
lazy-init="default"默认为false不延迟,启动时创建
lazy-init="true" 延迟,启动时不创建,使用时创建
4、创建对象之后的初始化和销毁
init-method="init-user"
destory-method="destroy-user"
servlet(init,service,destroy)
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
UserAction userAction=(UserAction)applicationCotext.getBean("userAction");
userAction.addUser();
SpringIOC容器
SpringIOC容器:是Spring核心内容
作用:创建对象,处理对象的依赖关系
IOC容器创建对象方式:1、调用无参构造
2、带参数构造
<constructor-arg value="" index=“” type=“”></constructor-arg>value元素 <value/>元素通过字符串来指定属性或构造器参数的值。index构造函数中参数的属性,type参数类型,ref引用其他的对象
construct-arg针对构造函数注入,property针对setter对应的方法注入
3、工厂创建对象{静态方法创建对象, 非静态方法创建对象}
对象的依赖关系:DI依赖注入,1、通过构造,
2、通过set方法属性注入
<bean id="user" class="包名">
<property id="106" value="tom"></property>
</bean>
3、名称空间(p-namespace) 属性注入
<bean id="user" class="包名" p:id="106" p:value="tom"> </bean>
<bean id="userDao" class="包名" > </bean>
<bean id="userService" class="包名" p:userDao-ref="userDao"> </bean>
<bean id="userAction" class="包名" p:userService-ref="userService"> </bean>
4、(自动装配:1、可以根据名称自动装配:autowire=“byName”,2、自动IOC容器中找与属性名同名的,自动注入3、定义全局)
<!---自动装配-->
<bean id="userDao" class="包名" > </bean>
<bean id="userService" class="包名" p:userDao-ref="userDao" autowire="byName"> </bean>
<bean id="userAction" class="包名" p:userService-ref="userService" autowire="byName"> </bean>
5、注解方式(可以简化Spring,使用注解的步骤:1、先引入context名称空间2、开启注解扫描 使用注解:把对象加入IOC容器@component,处理对象依赖关系@service):
<context:component-scan base-package=""></context:component-scan>
@Component(“userDao”)相当于<bean id="userDao"> ,base-package表示为需要扫描的所有子包
注解
1、@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@repository(实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的 (将一个对象加入到IOC容器中)
<bean id="" class=""/>)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类
共同点:被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理
Spring Core:Spring核心功能:IOC容器,解决对象的创建及依赖关系
Spring WEB:Spring对Web模块的支持
SpringAop:面向切面的编程(Aspect object Programming)
AOP:面向切面的编程,功能:让关注点代码与业务代码分离
关注点:重复的代码(方法)
切面:关注点形成的类,切面类
面向切面的编程,就是指对很多功能重复的代码的抽象,再有运行业务方法动态的植入“切面类代码”
切入点:通过切入点表达式,指定拦截那些类的那些方法,给指定的类在运行时植入切面类代码
代理模式:代理模式提供了对目标对象的另外的访问方式即通过代理访问目标对象
好处:可以在目标对象实现的基础上,增加额外的功能的操作,扩展目标对象的功能。
1、静态代理:保存数据到数据库
Dao直接保存 添加事务
代理对象,要实现与目标对象一样的接口
优点:可以做到不修改目标对象功能的前提下,对目标对象扩展
缺点:因为代理对象需要实现与目标对象相同的接口,会有很多代理类,一旦接口增加方法,目标对象与代理对象都需要维护。
解决方式:代理工厂 使用动态代理
2、动态代理:代理对象不需要实现接口
代理对象生成,使用到JDKAPI,动态的在内存中创建代理对象
动态代理,也叫jdk代理,接口代理
API中Proxy
public static Object newProxyInstance(
ClassLoader loader,指定当前目标对象的使用类的加载器
Class<?>[]interfaces,目标对象实现的接口类型
InvocationHandler h)事件处理器
cglib代理(子代理)在内存中构建一个子类对象从而实现对目标对象的扩展
cglib许多AOP框架使用
步骤:引用.jar文件-----Spring core包中包含
在内存中动态创建目标对象的子类
目标对象不可以是final类
目标方法不可以是final,static,则不会被拦截
Spring AOP编程中:如果加入容器中的目标对象有实现接口,用jdk代理
如果目标没有实现接口,用cglib代理
手动实现AOP编程 AOP面向切面的编程 AOP业务代码与关注点
(关注点:重复的代码 切面类:关注点形成的类)
AOP:关注点代码写一次(关注业务代码,又要关注关注点代码,不利于维护)
开发者只需关注核心业务代码
运行时,执行核心业务代码,动态植入代码
Spring对于JDBC的支持:Spring对于JDBC的支持:1、连接池2、jdbcTemplate工具类,简化了jdbc的开发
使用Spring jdbc步骤
1、导包:spring-jdbc-4.0.6.RELEASE spring-tx-4.0.6.Release c3p0-0.9.1. mysql-connector-java-5.1.12-bin
---恢复内容结束---
Spring框架:Spring框架的核心
代理模式,AOP,JDBC支持
Spring事务管理
Spring与Mybatis整合
传统开发模式
基于项目框架架构:entity/dao/service/action
1、实体类 class user{}
2、dao class userdao{
访问数据库}
3、Service class UserService{
UserDao userdao=new……();
}
4、action class userAction{
UserService userservice=new ……();
public void setUserService(UserService userservice){
this.userservice=userservice;
}
//由别人来创建:控制反转
}
用户访问:user.action--->Tomcat(服务器创建Action,Service,dao)
思考:1、对象创建创建能否写死
2、对象创建细节,对象的个数?创建的时间
3、对象之间的依赖
总结:Spring解决对象的创建,以及对象依赖关系管理
Spring框架:了解专业术语
组件/框架设计:侵入式:对现有的类的结构有影响,需要实现或继承
非侵入式:对现有的类的结构没有影响
控制反转(IOC):对象的创建交给外部容器完成,叫控制反转
依赖注入(DI):处理对象的依赖关系(set注入)
区别:控制反转,解决对象的创建问题
依赖注入:在创建完对象之后,对象的关系的处理(set方式注入)
Aop:面向切面编程
概述:Spring框架,是解决对象创建以及对象之间的依赖关系的一种框架(可以与其他框架一起使用mybatis,hibernate)
作用:整合
Spring提供一站式解决方案:1、Spring core:Spring核心功能,IOC容器
2、Spring WEB:对WEB模块支持
3、Spring DAO:对于jdbc支持
4、Spring ORM:对ORM支持
5、SpringAOP:切面编程
6、Spring对JavaEE的其他模块的支持
快速入门:1、导入相应的jar包:benas,context,core,expression,commons-logging
IOC容器配置:所有需要用到的类
IOC创建对象的细节:对象的个数,对象创建的时机
2、核心配置文件:applicationContext.xml
1、对象创建:单例、多例(设置Scope属性)
scope=“singleton”,默认值:单例
scope=“prototype”,多例
2、什么时候创建
scope=“prototype”在使用到对象时,才能创建对象
scope=“singleton”在启动(容器初始化之前),创建bean整个应用只有一个类
3、是否延迟创建
lazy-init="default"默认为false不延迟,启动时创建
lazy-init="true" 延迟,启动时不创建,使用时创建
4、创建对象之后的初始化和销毁
init-method="init-user"
destory-method="destroy-user"
servlet(init,service,destroy)
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
UserAction userAction=(UserAction)applicationCotext.getBean("userAction");
userAction.addUser();
SpringIOC容器
SpringIOC容器:是Spring核心内容
作用:创建对象,处理对象的依赖关系
IOC容器创建对象方式:1、调用无参构造
2、带参数构造
<constructor-arg value="" index=“” type=“”></constructor-arg>value元素 <value/>元素通过字符串来指定属性或构造器参数的值。index构造函数中参数的属性,type参数类型,ref引用其他的对象
construct-arg针对构造函数注入,property针对setter对应的方法注入
3、工厂创建对象{静态方法创建对象, 非静态方法创建对象}
对象的依赖关系:DI依赖注入,1、通过构造,
2、通过set方法属性注入
<bean id="user" class="包名">
<property id="106" value="tom"></property>
</bean>
3、名称空间(p-namespace) 属性注入
<bean id="user" class="包名" p:id="106" p:value="tom"> </bean>
<bean id="userDao" class="包名" > </bean>
<bean id="userService" class="包名" p:userDao-ref="userDao"> </bean>
<bean id="userAction" class="包名" p:userService-ref="userService"> </bean>
4、(自动装配:1、可以根据名称自动装配:autowire=“byName”,2、自动IOC容器中找与属性名同名的,自动注入3、定义全局)
<!---自动装配-->
<bean id="userDao" class="包名" > </bean>
<bean id="userService" class="包名" p:userDao-ref="userDao" autowire="byName"> </bean>
<bean id="userAction" class="包名" p:userService-ref="userService" autowire="byName"> </bean>
5、注解方式(可以简化Spring,使用注解的步骤:1、先引入context名称空间2、开启注解扫描 使用注解:把对象加入IOC容器@component,处理对象依赖关系@service):
<context:component-scan base-package=""></context:component-scan>
@Component(“userDao”)相当于<bean id="userDao"> ,base-package表示为需要扫描的所有子包
注解
1、@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@repository(实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的 (将一个对象加入到IOC容器中)
<bean id="" class=""/>)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类
共同点:被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理
Spring Core:Spring核心功能:IOC容器,解决对象的创建及依赖关系
Spring WEB:Spring对Web模块的支持
SpringAop:面向切面的编程(Aspect object Programming)
AOP:面向切面的编程,功能:让关注点代码与业务代码分离
关注点:重复的代码(方法)
切面:关注点形成的类,切面类
面向切面的编程,就是指对很多功能重复的代码的抽象,再有运行业务方法动态的植入“切面类代码”
切入点:通过切入点表达式,指定拦截那些类的那些方法,给指定的类在运行时植入切面类代码
代理模式:代理模式提供了对目标对象的另外的访问方式即通过代理访问目标对象
好处:可以在目标对象实现的基础上,增加额外的功能的操作,扩展目标对象的功能。
1、静态代理:保存数据到数据库
Dao直接保存 添加事务
代理对象,要实现与目标对象一样的接口
优点:可以做到不修改目标对象功能的前提下,对目标对象扩展
缺点:因为代理对象需要实现与目标对象相同的接口,会有很多代理类,一旦接口增加方法,目标对象与代理对象都需要维护。
解决方式:代理工厂 使用动态代理
2、动态代理:代理对象不需要实现接口
代理对象生成,使用到JDKAPI,动态的在内存中创建代理对象
动态代理,也叫jdk代理,接口代理
API中Proxy
public static Object newProxyInstance(
ClassLoader loader,指定当前目标对象的使用类的加载器
Class<?>[]interfaces,目标对象实现的接口类型
InvocationHandler h)事件处理器
cglib代理(子代理)在内存中构建一个子类对象从而实现对目标对象的扩展
cglib许多AOP框架使用
步骤:引用.jar文件-----Spring core包中包含
在内存中动态创建目标对象的子类
目标对象不可以是final类
目标方法不可以是final,static,则不会被拦截
Spring AOP编程中:如果加入容器中的目标对象有实现接口,用jdk代理
如果目标没有实现接口,用cglib代理
手动实现AOP编程 AOP面向切面的编程 AOP业务代码与关注点
(关注点:重复的代码 切面类:关注点形成的类)
AOP:关注点代码写一次(关注业务代码,又要关注关注点代码,不利于维护)
开发者只需关注核心业务代码
运行时,执行核心业务代码,动态植入代码
Spring对于JDBC的支持:Spring对于JDBC的支持:1、连接池2、jdbcTemplate工具类,简化了jdbc的开发
使用Spring jdbc步骤
1、导包:spring-jdbc-4.0.6.RELEASE spring-tx-4.0.6.Release c3p0-0.9.1. mysql-connector-java-5.1.12-bin
SpringAOP +SpringJDBC
事务:使用AOP Spring对于事务有实现
目标:Spring声明式事务实现
xml
注解
程序中的事务控制
用户-->action-->service--->dao 一个程序运行成功,service成功,dao写入数据库成功
事务控制放在service
开发步骤:1、后台:数据库/service/dao/entity
2、Dao使用jdbcTemplate
3、对象的创建IOC容器
Spring对于事务管理
1、配置事务管理器类 2、配置事务管理增强3、配置AOP,拦截什么方法,事务在方法上
配置事务:1、JdbcTemplate:事务管理器类 DataSourceTransactionManager
2、事务管理增强
3、AOP
注解的方式声明事务:指定注解方式实现事务
mybatis和spring整合包
3、工程结构 配置文件
1、SqlMapConfig.xml----mybatis配置文件,配置别名,settings,mapper
2、Spring配置文件-----为了方便管理将配置文件分开
bean-dao.xml---配置数据源,SqlSessionFactory,Mapper扫描器
bean-service.xml-----配置service接口
bean--transaction.xml---事务管理
bean.xml
4、配置文件 SqlSessionFactory和Spring整合的