spring 学习笔记

控制反转IOC(Inversion of Control):
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数据

 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值