Spring的事务声明有两种方式,编程式和声明式.Spring主要是通过"声明式事务"的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处就是大大减少了代码量.
(就是在配置文件中添加一个transaction配置文件,里边声明事务管理器,再配置声明事务标识,直接在类上加注解就可以了)
1.基于XML文件进行配置(
package com.itheima.spring.factory;
import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;
public class StaticFactory {
public static AccountService createAccountService() {
return new AccountServiceImpl();
}
}
package com.itheima.spring.factory;
import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;
public class InstanceFactory {
public AccountService createAccountService() {
return new AccountServiceImpl();
}
}
).
2.w基于注解进行配置(注解扫描).
Set注入:
构造函数注入:
复杂对象注入list,set,map,props:
mySet1
mySet2
mySet3
myStr1
myStr2
myStr3
myList1
myList2
myList3
propvalue1
propvalue2
propvalue3
在Spring框架中一旦把一个bean纳入到SpringIOC容器中,这bean的声明周期就交由容器进行管理.
概括来说主要有四个阶段:实例化,初始化,使用,销毁.
AOP指一种程序设计范型,以切面的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象类或者方法中的横切关注点.通常,事务、日志、安全性等关注就是应用中的横切关注功能.
Joinpoint(连接点):程序执行的某个特定位置(程序中所有方法的方法前,方法后,异常等时机都是连接点)。每个方法有多个连接 点
Pointcut(切入点):定位你感兴趣的方法。
Advice(通知/增强):增强逻辑代码.横切逻辑执行的方位信息
切面 = 切点 + 增强.
Spring发现涉及带接口的就是用JDK动态代理,如果不涉及接口就使用CGLIB动态代理.
@Component,@Controller,@Service,@Repository
用户发送请求给前端控制器,前端控制器请求查询Handler到处理器映射器,处理接映射器返回处理器执行链给前端控制器,前端控制器请求处理器适配器,处理器适配器请求handler,处理完返回数据到前端控制器,经过视图解析器渲染返回view对象给前端控制器,再经过视图渲染响应给用户.
当定义一个bean在Spring里,我们还能给这个bean生命一个作用域.它可以通过bean定义中的scope属性来定义.
如,当spring要在需要的时候每次生产一个新的bean实例,bean的scope属性就被指定为prototype.
另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope属性必须设为singleton.
request:每次http请求都会创建一个bean
session:在一个HTTP Session中,一个bean定义对应的一个实例,
缺省的Spring bean 的作用域是Singleton.
Spring框架中的单例bean不是线程安全的.
可以.