参见:http://blog.csdn.net/fei641327936/article/details/52015121

Mybatis:

实现IOC的轻量级的一个Bean的容器

Inversion of control 控制反转:由容器控制程序之间的关系,不是程序代码操作

Depend Inject 依赖注入

Aspect oriented programming 面向切面编程

Spring能帮助我们根据配置文件创建及组装对象之间的依赖关系;

Spring面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制

Spring能非常简单的帮我们管理数据库事务

谁依赖谁:应用程序依赖于IOC容器

为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源

谁注入谁:IOC容器注入应用程序某个对象,应用程序依赖的对象

注入了什么:注入某个对象所需要的外部资源(包括对象,资源,常量数据)

Bean:由IOC容器管理的那些组成你应用程序的对象我们叫Bean

控制反转:就是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权利转移到第三方。

控制的什么被反转了:获得依赖对象的方式反转了

缺点:

1>.IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果追求运行效率的话,就必须对此进行权衡。

2>.需要进行大量的配置工作,比较繁琐,对小项目而言,加大一些工作成本。

1.依赖注入的方式:

第一种方法:依赖get() set()方法实例化Bean

1>.如果默认注册为default-autowire="byname",则bean里面的参数就不用写了

2>.如果不写默认注册为名称,则bean里面需要property(name和ref)

第二种方式:依赖构造方法实例化Bean

1>.如果默认注册为default-autowire="constructor"则bean里面的constructor-arg就不用写了。

2>.如果不写默认注册为构造,则bean里面需要写constructory-arg ref

第三种方式:注解

只写属性,属性上面@Resource(type=类.class)

配置文件需要配置自动扫描

<context:component-scan base-package="包名前面"></...>

  1.  <context:annotation-config/>
    <!-- (当前实例在spring容器中的标识 class 当前类的包名和类名) -->
    <bean id="bookDao" class="com.hellojava.dao.BookDao"></bean>
    <bean id="oracleBookDao" class="com.hellojava.dao.OracleBookDao"></bean> <bean id="bookService" class="com.hellojava.business.BookService"></bean>
    <!-- 使用get() set()方法 实例化bean(默认注册为 default-autowire="byName"这里就可以不用写)
    <property name="bookDao" ref="bookDao"></property> 使用构造器方法 实例化bean(默认注册为 default-autowire="constructor"这里就可以不用写)
    <constructor-arg ref="bookDao"></constructor-arg>
    </bean> -->
    <context:component-scan base-package="com.hellojava"></context:component-scan>

1>.通过注解注入Bean

@Autowired:自动装配

根据类型注入,用于构造器,字段,方法注入

*写在哪个上面,相当去在xml文件中写的default-autowire

2>.通过JSR-250注解

@Resource:自动装配

只用于setter(方法注入)  配置@Resource(type=类名)或者(name=属性)

3>.@Service注解一个业务类

@Resource:自动装配

@Repository:持久层的注解

2.Spring AOP 面向切面编程

通知Advice:定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。

连接点Joinpoint:程序能够应用通知的一个"时机",这些"时机"就是连接点,类如方法被调用时,异常被抛出时等。

切入点Pointcut:通知定义了切面要发生的"故事"和时间,那么切入点就是定义了"故事"发生的地点,类如某个类或者方法的名称。

切面Aspect:通知和切入点共同组成了切面(时间,地点和要发生的"故事")

引入Introduction:引入我们向现有的类添加新的方法和属性(spring提供了一个方法注入的功能)

目标Target:即被通知的对象

代理Proxy:应用通知的对象,原生对象(基础)+切面(JDK动态代理或者CGLIB代理(hibernate))

织入Weaving:把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机

1>.编译时:当一个类文件被编译时进行织入

2>.类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码

3>.运行时:切面在运行的某个时刻被织入,springAOP就是以这种方式织入切面的,原理使用了JDK的动态代理技术。

Spring提供了4种实现AOP的方式:

1>.经典的基于代理的AOP

2>.@AspectJ注解驱动的切面

3>.纯POJO切面

4>.注入式AspectJ切面

基于代理的AOP:

1>.创建通知:实现这几个接口,把其中的方法实现了

Before 前  After-returning 返回后  After-throwing 抛出后  Arround 周围/环绕  Introduction 引入

2>.定义切点和通知者:在Spring 配置文件中配置这些信息

3>.使用proxyFactoryBean来生成代理

在配置文件里面:

1>.写被代理对象的Bean

2>.定义切面和通知(Before After-returning After-throwing Interceptor)

3>.使用proxyBean 把通知代理到原生对象上

@AspectJ注解驱动的切面

1>.配置文件自动扫描 comntext:component-scan

2>.配置文件aop:aspectj-autoproxy

3>.持久层@component("")

4>.切面 @Aspect @Component @通知(Before... ...)

AOP标签配置+注解

1>.持久层@Component("")

2>.切面@Component("")

3>.配置文件:

定义:切入点pointcut

切面:Aspect

通知:Advice 方法为方法名  ref为切入点

 //@Service("bookService")
public class BookService {
//第三种方法:@Resource(type=IBaseDao.class)写在属性上面 ,配置文件需要配置自动扫描
//@Resource(type=IBaseDao.class)
@Resource(name="bookDao")
private IBaseDao bookDao;
// 第一种方法:依赖get() set()方法 实例化bean
public IBaseDao getBookDao() {
return bookDao;
}
public void setBookDao(IBaseDao bookDao) {
this.bookDao = bookDao;
}
// 第二种方法:依赖构造方法 实例化bean
/*public BookService(){}
public BookService(IBaseDao bookDao){
this.bookDao=bookDao;
}*/ public void hello(){
String h=bookDao.hello();
System.out.println(h);
}
}

Spring框架使用(控制反转,依赖注入,面向切面AOP)的更多相关文章

  1. 玩转Spring MVC (一)---控制反转(依赖注入)

    Spring的核心是控制反转,什么是控制反转呢?小编浅述一下自己的拙见,有不当之处还希望大家指出. 控制反转(IOC),也可以叫做依赖注入(DI),这两个词其实是一个概念. 控制反转,那是什么控制被反 ...

  2. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  3. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  4. Spring之控制反转——IoC、面向切面编程——AOP

      控制反转——IoC 提出IoC的目的 为了解决对象之间的耦合度过高的问题,提出了IoC理论,用来实现对象之间的解耦. 什么是IoC IoC是Inversion of Control的缩写,译为控制 ...

  5. Spring 01: Spring配置 + IOC控制反转 + Setter注入

    简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...

  6. 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory

    spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...

  7. Spring框架之控制反转和依赖注入

    学Spring框架必须理解控制反转和依赖注入.下面各自举一个例子,来说明控制反转和依赖注入. IOC(控制反转):应用本身创建和维护的依赖对象:现在交由外部容器(Spring)来创建和维护:这个控制权 ...

  8. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  9. Spring 框架学习—控制反转(IOC)

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...

随机推荐

  1. BZOJ1337: 最小圆覆盖

    题目:求n个点的最小圆覆盖. 题解:最小圆覆盖,上模板.复杂度证明可以戳:这里 代码: #include<cstdio> #include<cstdlib> #include& ...

  2. Arcgis ArcMap 10 如何生成msd地图文档定义【 arcgis mxd怎么转换成msd】

    .mxd是arcgis 的地图文档后缀名. .msd是arcgis 的地图服务定义文件,是 map service definition 的缩写. 基于 MSD 的服务支持 Maplex.制图表达和新 ...

  3. IIS 7.0 SSL 部署指南

    一.  生成证书请求 1.进入IIS控制台    进入IIS控制台,并选择服务器的服务器证书设置选项.  2.添加证书请求    进入服务器证书配置页面,并选择“创建证书申请”  3.选择加密服务提供 ...

  4. Swift3.0:照片选择

    一.介绍 图片选择或者拍照功能: 1.选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController ...

  5. FileStream 的FileShare一点小认识

    C#读写文本文件一般都是用StreamWriter来实现(读书的时候就这样用,毕业后这几年基本也是这样干的),通常代码如下: using (StreamWriter sw = new StreamWr ...

  6. 遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析

    开发的机器,系统情况如下: 1.server 2003 sp2 x86 2.补丁安装360 3.升级到IE8 因为担心server 2003 sp2 不能够自动update,最近都是用360打补丁,比 ...

  7. SQL Server 2005 Integration Services (SSIS)数据源之MySQL

    一安装MySQL数据库的ODBC驱动 下载MySQL Connector ODBC 3.51.rar 单击setup按默认安装即可! 如下图所示,在ODBC数据源管理器中看到“MySQL ODBC 3 ...

  8. CSS阻塞渲染、怎么防止css阻塞

    浏览器渲染流程: 1.浏览器开始解析目标HTML文件,执行流的顺序为自上而下. 2.HTML解析器将HTML结构转换为基础的DOM(文档对象模型),构建DOM树完成后,触发DomContendLoad ...

  9. PLSQL Developer连接远程Oracle数据库

    要连接远程数据库,传统的一定可行的方法是在本地装一个oracle.然后使用"Network Configuration Assistant"配置.之后用PL/SQL Dev连接.由 ...

  10. Android -- WebView进度条

    有系统actionbar requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能 setCo ...