IOC(控制反转)、DI(依赖注入)

ioc存在的意义:“高内聚,低耦合”
ioc可以使类与类之间-高内聚: 类内部的关系越紧密越好;低耦合: 类与类的关联越少越好。用自己的话说就是类与类之间需要调用的时候,我们再也不是直接去调用了,而是通过ioc容器,运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
采用了依赖注入,在初始化的过程中就不可避免的会写大量的new。这里IoC容器就解决了这个问题。这个容器可以自动对你的代码进行初始化,你只需要维护一个Configuration(可以是xml可以是一段代码),而不用每次初始化一辆车都要亲手去写那一大段初始化的代码。这是引入IoC Container的第一个好处

给ioc的定义:
创建对象
 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
给对象属性赋值
DI(Dependency Injection,依赖注入),Ioc的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection依赖注入)来实现的。

主要通过:下面三个方法实现IOC(控制反转)、DI(依赖注入)
FileSystemXmlApplicationContext与ClassPathXMLApplicationContext的实现:
IOC(控制反转)、DI(依赖注入)
annotationXmlApplicationContext的实现方法:
创建对象的四个注解:

@Component 创建对象加入容器。如:工具类,除了dao、service、controller其他以外的类使用此注解。

@Repository 同@Component ,用于修饰持久层的类。

@Service 同@Component ,用于修饰业务层的类。

@Controller 同@Component ,用于修饰表现层的类。

依赖注入的四个注解:

@Autowired 给对象属性赋值: 1. 根据类型注入(字段类型,方法形参类型); 2. 根据名称注入(字段名称,方法形参名称)

@Qualifier 要配置@Autowired使用,可以只根据名称注入。 也可以在纯注解中单独使用。

@Resource 了解,jdk1.8以后不提供此注解的支持。

@Value 直接给简单类型属性赋值,或获取配置文件值。

对象范围、生命周期相关的注解:

@Scope 指定对象为singleton单例,或prototype多例。

@Lazy 延迟初始化(使用较少,因为我们大多数单例的对象都是在启动时候创建。)

@PostConstruct 修饰方法,修饰的方法会在创建对象之后执行。

@PreDestroy 修饰方法,修饰的方法会在调用容器的close()方法时候执行。

纯注解开发用到的一些注解:

@Configuration 指定注解配置类

@ComponentScan 指定注解扫描的包

@Import 导入其他注解配置类

@PropertySource 加载类路径下的配置文件

@Value、@Qualifier

@Bean 修饰方法,会自动把方法返回值加入ioc容器