利用周末加课设空余的时间认真学习了一下Spring框架,做个小结:
Spring框架的核心为IOC和AOP,IOC:控制反转,AOP:面向切面编程。优点:分层的一站式轻量级框架,具有简单、可测试、松耦合等特点。
IOC:将对象的创建交给Spring容器来实现。Spring核心容器:BeanFactory,ApplicationContext(是BeanFactory的子接口)。创建ApplicationContext接口实例的方法:(1)ClassPathXmlApplicationContext(从类路径classPath寻找配置文件)(2)FileSystemXmlApplicationContext(绝对路径查找)
底层原理:(1)xml配置文件
(2)dom4j解析xml文件
(3)工厂设计模式
(4)反射(主要):Class class=Class.forName(类路径)
类名 类对象=class.newInstance();
DI:依赖注入,含义与IOC相同。作用:在使用Spring框架创建对象时,动态地将其所依赖的对象注入Bean组件中。
实现方式:(1)setter方法注入,又分为调用无参构造器实例化Bean和无参静态工厂方法实例化Bean。
(2)构造方法注入:通过调用带参数的构造方法实现,每个参数代表一个依赖。
@Component(""),@Repository(""),@Service(""),@Controller("")注解功能相同,用作类对象的创建(Bean的装配)
@Resource(name=""):属性注入(基本类型或类对象)
使用注解装配需开启注解扫描:
<!--使用context命名空间,通知Spring扫描指定包下所有类,进行注解解析-->\
<context:component-scan base-package="Bean所造的包路径"/> //需要导入AOP的Jar包
———————————————————————————————————————————————AOP:面向切面编程,采用横向抽取机制。底层实现:动态代理
AspectJ:基于Java语言的AOP框架,提供了强大的AOP功能。
基于注解的声明式AspectJ:@Aspect:定义切面
@Pointcut:定义切入点表达式(表达式格式:execution(* com.edu.sdju.*.*(..)”)*与com之间有一个空格)
@Before(“”):前置增强 @AfterReturning(“”):后置增强
@Around(“”):环绕通知 @AfterThrowing(value"",throwing=""):异常通知
@After(“”):最终通知
———————————————————————————————————————————————
针对数据库的操作,Spring提供了JdbcTemplate类
JdbcTemplate常用方法:(1)execute():完成执行SQL语句的功能
(2)update(String sql,Object... args):完成插入、更新、删除数据的操作,参数不能为NULL,返回受影响的行数
(3)query():
1)queryForObject(String sql,Class<T> requiredType):返回摸一个值
例:String sql="select count(*) from user;
int count=jdbcTemplate.queryForObject(sql,Integer.class)
2)queryForObject(String sql,RowMapper rowMapper,Object... args):返回一个Object类型的单行记录
3)List query(String sql,RowMapper rowMapper):返回一个List类型的结果
—————————————————————————————————————————————————————
(1)什么是事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
(2)事务特性:原子性、一致性、隔离性、持续性(ACDI)
Spring事务管理提供接口PlatformTransactionManager:事务管理器
Spring事务管理的方式:(1)编程式事务管理
(2)声明式事务管理(xml,annotation)
基于Annotation方式的声明式事务
1.配置事务管理器(xml文件中配置)
2.开启注解扫描
<context:component-scan base-package="Bean所造的包路径"/>
3.注册事务注解驱动
<tx:annotation-driven transaction-manager="transactionManager"/> //名字要与xml文件中配置的事务管理器id相同
4.在需要使用事务的SpringBean类或者Bean类的方法上添加注解@Transactional
OVER!