您的位置:首页 > 编程语言 > Java开发

Spring 笔记

2009-07-13 10:25 337 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: