AOP:Aspect Oriented Programming,面向切面编程。用来封装横切关注点。在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制,事务管理,记录日志等公用操作处理。AOP底层是动态代理,如果是接口采用JDK动态代理,如果是类采用CGLIB方式实现动态代理。

 

IOC:Inversion of Control,控制反转。在传统的Java开发模式中,当需要一个对象时,我们会自己new一个对象。而在spring开发模式中,spring容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring提供的对象就可以了。这就是控制反转的思想。

 

DI:Dependency Injection,依赖注入。DI是一个程序设计模式和架构模型, 尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个 数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。

依赖注入常用的有4种方式:

①注解

由于是基于注解的DI,所以无需再Spring配置文件中进行节点配置,只需配置包扫描器即可!

配置包扫描器用途:

该包下以及子包中的类才可以被Spring扫描,去寻找被注解的类和属性,让Spring容器管理赋值

aop缺点 ios aop ioc di_依赖注入

 

注解配置方式:

例如在Bean类方法上加@Component注解,如:

@Component(value="stu")
public class Student {
@Value("呵呵")   
private String name;
@Value("13")
private String age;
 
/*
 * JDK注解 @Resource(name="car2")
 */
 
/*
 * Spring注解
 */
@Autowired
@Qualifier(value="car2")
 
private Car car;
 
 
@Override
public String toString() {
    return "Student [name=" + name + ", age=" + age + ", car=" + car + "]";
}

等价于@Component的注解:

@Component[不分层的情况下]

@Repository() [Dao层] 

@Service() [Biz层]

@Controller() [Action类] 

 

 

②基于xml属性的DI

  1、设值注入(set方法注入):本质上是调用了Bean的setXXX()进行值的注入。分为普通属性和域属性

aop缺点 ios aop ioc di_配置文件_02

 

 

 

2、构造注入

aop缺点 ios aop ioc di_依赖注入_03

 

 3、命名空间p注入(使用前要先要在Spring配置文件中引入p命名空间)

aop缺点 ios aop ioc di_动态代理_04

aop缺点 ios aop ioc di_动态代理_05

 

③集合属性注入[List、Set、Map]

aop缺点 ios aop ioc di_动态代理_06

aop缺点 ios aop ioc di_依赖注入_07