Spring 笔记

1

IoC : Inversion of Control 控制反转

应用本身不负责对象的创建和维护,而是由外部容器负责,使用依赖注入来获取对象;
控制权就由应用移到了外部容器,控制权的转移就是反转;

 

实现依赖注入: 反射 DependencyInjection : DI

2 依赖注入

(1) 方法:   构造函数;   setter;

(2) 在运行期,由外部容器动态的将bean注入到对象中

 

3 为何使用Spring

(1) 降低耦合度;
(2) 使用Spring提供的众多服务; 如 事务管理;消息服务
(3) 单例模式支持;
(4) AOP技术,实现:权限拦截等等;
(5) 众多的辅助类:如JdbcTemplate, HibernateTemplate
(6) 对主流的应用框架提供了集成支持:Hibernate, JPA, Struts,Hibernate;

4 轻量级与重量级概念的划分

 Spring: 默认不为应用打开全部服务;
 EJB: 默认为应用打开全部服务;

 

5. Spring什么时候创建bean实例?
默认情况下,容器实例化的时候创建

 

6 bean的作用域; 默认情况下是单例的。

scope="prototype" --- 每次getBean返回一个新的对象;

 

7  init-method="init"      --- bean初始化后立即完成一个操作(bean.init()) 

    destroy-method="destroy" ---bean销毁前立即完成一个操作(bean.destroy())  

    AbstractApplicationContext.close();

8  bean的创建:

   (1) 类构造器实例化
   (2) 静态对象工厂来创建 :很少用
   (3) 实例工厂方法实例化:几乎不用,它需要实例化工厂


9 注入集合类型

(1) Set sets; setSets();
  <propertyname="sets">
   <set>
    <value>set1</value>
   </set>  
  </property>

 (2) List lists; setLists();
  <propertyname="lists">
   <list>
    <value>list1</value>
   </list>
  </property>
 
 (3) Map maps; setMaps();
  <propertyname="maps">
   <map>
    <entrykey="key1"value="value1"></entry>
   </map>
  </property>

 (4) Properties properties;setProperties();
  <propertyname="properties">
   <props>
    <porpkey="key1">value1</prop>
   </props>
  </property>
  
 (5) 数组同list方式;

 

10  注解方式实现依赖对象的装配:可以减少配置文件的臃肿

     @Autowired(类型装配), 

     @Autowired(required=false) @Qualifier("personDAO") 按名称装配

     @Resource(按照name, 字段名称,类型来注入)

11 自动装配  <bean ... autowire="byName /byType ...." />
12 自动扫描功能

    context:component-scan base-package="", 该包下全部的类及其子包的全部类做成bean    

    需要被扫描的类加上注解
    @Component, @Service, @Controller,@Repository

 

    @Repository("personDAO")   指定名称

    @Repository @Scope("singleton") 默认为单例模式

 

13 AOP

   目标对象:被代理的对象    --- target
   通知(Advice):我们要做的工作  ----- doXXX() 
   在方法前:前置通知
   在方法后:后置通知
   异常:    例外通知
   finally:  最终通知;
   在内部决定目标方法是否被调用:环绕通知;
   连接点:被拦截的方法
   切入点:一批连接点的集合(n>=0)
   切面:Factroy
   织入:
   引入:在不修改类代码的前提下,可以在运行期为他引入方法和字段;

14

//注解方式:

@Aspect

public class.....{

 

@Pointcut("execution(* cn.itcast.service.impl.PersonServiceBean.*.*(..))")
private void anyMethod()

//声明  anyMethod()切入点

 

@Before("anyMethod()")

@AfterReturning   后置
@AfterThrowing    例外
@After     最终
@Arround
 

}

 

 //配置xml方式:

<aop:config>
    <aop:aspect ref="XMLBeanInterceptor">
     <!-- 声明切入点 -->
     <aop:pointcut id="pc" expression="* cn.itcast.service..*.*(..)" />
    
     <!-- 通知 -->
     <aop:before pointcut-ref="pc" method="beforeAdvice" />
     ...
    </aop:aspect>
   </aop:config>


15 事务

 查询不用开事务

 @Transactional(propagation=Propagation.NOT_SUPPORTED)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值