控制反转IOC(Inversion of Control):
所谓控制反转就是指应用本身不负责依赖对象的
创建以及维护,依赖对象的创建以及维护是由外部
容器负责的。这样控制权就由应用移到了外部容器,控制权的
转移就是所谓反转。
所谓依赖注入就是指,在运行期,由外部容器动态地
将依赖对象注入到组件中。
spring优点:
1.降低组件之间的耦合度,实现软件各层之间的解耦
Control->Service->Dao
2. 可以 使用容器提供众多服务:如事务管理器,消息服务
等等。
3.容器提供单例模式支持。
4.容器提供了AOP技术,很容易实现权限拦截,运行监控等
5.提供众多辅助类,如JDBATemplate、hibernateTemPlate
6.对主流的应用框架提供了集成支持.如Struts、jpa等
轻量级与重量级概念的划分:
主要看使用了多少服务,影响性能
spring根据启动服务的多少定义
EJB重量级
三种实例化bean的方式:
1.使用类构造器实例化(常用)
<bean id="orderService" class="com.sp.OrderServiceBean"></bean>
2.使用静态工厂类方法实例化:
<bean id="orderService" class="com.sp.OrderServiceFactory" factory-method="createOrder"></bean>
public class OrderServiceFactory{
public static OrderServiceBean createOrder(){
rerurn OrderServiceBean();
}
}
3.使用实例化工厂的方法实例化
<bean id="orderService" class="com.sp.OrderServiceFactory"></bean>
<bean id="orderService" factory-bean="orderServiceFactory" factory-method="createOrder"/>
public class OrderServiceFactory{
public OrderServiceBean createOrder(){
rerurn OrderServiceBean();
}
}
bean的作用域(scope):
singleton(默认):调用的是同一个bean
prototype:每调用一次都会创建一个新的bean
request
session
global session
@Autowired(required=false)
@Quaifier()
组件自动扫描
<context:component-scan base-packge="com.***.**">
base-packge为需要扫描的包(含子包)
@Service:用于标注业务层组件
@Controller:用于标注控制层组件(如struts中的action)
@Repository:用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类时,用这个注解标注
@Scope("prototype");默认singleton(单例),修改bean的作用域
@PostConstruct
AOP--代理对象:
proxy
可以通过spring jar里面的cglib创建代理对象
Enhancer enhancer = new Enhancer();
AOP中的概念
Aspect(切面):指横切性关注点的抽象即为切面,
它与类相似,只是两者关注点不一样,类是对物体特征的
抽象,而切面是横切性关注点的抽象
joinpoint(连接点):所谓连接点是指那些被拦截到的点,
在spring中,这些点指的是方法。
pointcut(切入点):指的是我们要对那些joinpoint进行拦截的定义
advice(通知):拦截到joinpoint之后所要做的事情就是通知
环绕通知@Around
前置通知@Before
后置通知@AfterReturning
例外通知@AfterThrowing
最终通知@After
target(目标对象):代理的目标对象
weave(织入):指将aspects应用到target对象并导致proxy
对象创建的过程称为织入
introduction(引入):在不修改代码的前提下,introduction
可以在运行期为类动态的添加一些方法或field
spring提供了两种切面使用方式进行开发
1.基于xml配置的方式进行aop开发
2.基于注解方式进行aop开发
<aop: aspectj-autoproxy />
事务的传播属性:
@Transactional(propagation=REQUIRED,timeout)
REQUIRED:业务方法需要一个属性(默认)
NOT_SUPPORT:声明不需要事务
REQUIRESNEW:表明是否存在事务,都会发起一个新的事务
MANDATORY
SUPPORTS
Never
NESTED
四种事务隔离级別
1.Read Uncommited:读未提交数据(会出现脏读,不可重复读
和幻读)
2.read commited:读已提交数据(会出现不可重复和幻读)
3.repeatable read:可重复读(会出现幻读)
4.serializable:串行化
脏读:一个事务读取另一个事务未提交的更新数据
不可重复读:在同一事务中,多次读取同一数据返回的
结果有所不同
幻读:一个事务读取到另一事务已提交的insert数据
public class PersonServiceBean{
private personDao pd = new PersonDaoBean();
public void save(Person p){
ps.save(person);
}
}
PersonDaoBean是在应用内部创建以及维护的。
所谓控制反转就是指应用本身不负责依赖对象的
创建以及维护,依赖对象的创建以及维护是由外部
容器负责的。这样控制权就由应用移到了外部容器,控制权的
转移就是所谓反转。
public class PersonServiceBean{
private PersonDao pd;
//通过构造器参数,让容器把创建好的依赖对象
//注入进PersonServiceBean,当然也可以使用setter方法进行注入
public PersonServiceBean(PersonDao pd){
this.pd = pd;
}
public void save(Person p){
ps.save(person);
}
}
依赖注入DI(Dependency Injection):
所谓依赖注入就是指,在运行期,由外部容器动态地
将依赖对象注入到组件中。
spring优点:
1.降低组件之间的耦合度,实现软件各层之间的解耦
Control->Service->Dao
2. 可以 使用容器提供众多服务:如事务管理器,消息服务
等等。
3.容器提供单例模式支持。
4.容器提供了AOP技术,很容易实现权限拦截,运行监控等
5.提供众多辅助类,如JDBATemplate、hibernateTemPlate
6.对主流的应用框架提供了集成支持.如Struts、jpa等
轻量级与重量级概念的划分:
主要看使用了多少服务,影响性能
spring根据启动服务的多少定义
EJB重量级
三种实例化bean的方式:
1.使用类构造器实例化(常用)
<bean id="orderService" class="com.sp.OrderServiceBean"></bean>
2.使用静态工厂类方法实例化:
<bean id="orderService" class="com.sp.OrderServiceFactory" factory-method="createOrder"></bean>
public class OrderServiceFactory{
public static OrderServiceBean createOrder(){
rerurn OrderServiceBean();
}
}
3.使用实例化工厂的方法实例化
<bean id="orderService" class="com.sp.OrderServiceFactory"></bean>
<bean id="orderService" factory-bean="orderServiceFactory" factory-method="createOrder"/>
public class OrderServiceFactory{
public OrderServiceBean createOrder(){
rerurn OrderServiceBean();
}
}
bean的作用域(scope):
singleton(默认):调用的是同一个bean
prototype:每调用一次都会创建一个新的bean
request
session
global session
@Autowired(required=false)
@Quaifier()
组件自动扫描
<context:component-scan base-packge="com.***.**">
base-packge为需要扫描的包(含子包)
@Service:用于标注业务层组件
@Controller:用于标注控制层组件(如struts中的action)
@Repository:用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类时,用这个注解标注
@Scope("prototype");默认singleton(单例),修改bean的作用域
@PostConstruct
AOP--代理对象:
proxy
可以通过spring jar里面的cglib创建代理对象
Enhancer enhancer = new Enhancer();
AOP中的概念
Aspect(切面):指横切性关注点的抽象即为切面,
它与类相似,只是两者关注点不一样,类是对物体特征的
抽象,而切面是横切性关注点的抽象
joinpoint(连接点):所谓连接点是指那些被拦截到的点,
在spring中,这些点指的是方法。
pointcut(切入点):指的是我们要对那些joinpoint进行拦截的定义
advice(通知):拦截到joinpoint之后所要做的事情就是通知
环绕通知@Around
前置通知@Before
后置通知@AfterReturning
例外通知@AfterThrowing
最终通知@After
target(目标对象):代理的目标对象
weave(织入):指将aspects应用到target对象并导致proxy
对象创建的过程称为织入
introduction(引入):在不修改代码的前提下,introduction
可以在运行期为类动态的添加一些方法或field
spring提供了两种切面使用方式进行开发
1.基于xml配置的方式进行aop开发
2.基于注解方式进行aop开发
<aop: aspectj-autoproxy />
事务的传播属性:
@Transactional(propagation=REQUIRED,timeout)
REQUIRED:业务方法需要一个属性(默认)
NOT_SUPPORT:声明不需要事务
REQUIRESNEW:表明是否存在事务,都会发起一个新的事务
MANDATORY
SUPPORTS
Never
NESTED
四种事务隔离级別
1.Read Uncommited:读未提交数据(会出现脏读,不可重复读
和幻读)
2.read commited:读已提交数据(会出现不可重复和幻读)
3.repeatable read:可重复读(会出现幻读)
4.serializable:串行化
脏读:一个事务读取另一个事务未提交的更新数据
不可重复读:在同一事务中,多次读取同一数据返回的
结果有所不同
幻读:一个事务读取到另一事务已提交的insert数据