Spring中的IOC和DI,以及Bean管理(具体可见项目spring_iocDemo)

Spring中的IOC和DI,以及Bean管理(具体可见项目spring_iocDemo)

1.Spring中IOC底层的实现原理

传统方式的开发: UserService us = new UserService();

即在web层创建业务层的类,并且连接口也没有,直接创建的就是实现类。

显然这种方式不好:后面则提倡面向接口编程,此时就是需要实现类了。

UserService us = new UserServiceImpl();

但这种方式也不好,因为在web层直接创建了接口的实现类,这样的话web层就和业务层产生了耦合。

后面则采用 OCP原则(开闭原则),即:open-close原则,对程序扩展是open;对修改代码是close;尽量做到不修改程序的源码,实现对程序的扩展。

上面这种情况,如果需要修改实现类,这时候就需要修改程序的源码了,显然不好。后面又有了:

可以采用设计模式:工厂模式

在这里插入图片描述

class FactoryBean{

​ public static UserSevice getUs() {

​ return new UserServiceImpl();

​ }

​ … // 还有其他类则往下写

}

UserService us = FactoryBean.getUs();

现在虽然接口和实现类没有耦合关系了,但是接口和工厂类产生了耦合。

假如要切换底层实现类的话,则还是需要去修改工厂类的源码,因此还是不好。后面则出现了:Spring的IOC

即用 工厂 + 反射 + 配置文件 的方式来实现。

配置文件:

工厂类:

public FactoryBean{

​ public Object getBean(String id) {

​ … // 解析配置文件,通过id找到对应的class

​ // 反射,实现生成

​ }

}

2. IOC(Inverse Of Control):控制反转 以及 DI(Depengdency Injection):依赖注入 的概念
  • IOC反转控制:就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理。
    • 简单说,就是创建UserService对象的控制权被反转到了Spring框架。
  • DI依赖注入:依赖于IOC,就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去。
3.Spring的Bean管理----工厂类介绍

在这里插入图片描述
由图中我们可以看到,我们所使用的工厂类是ApplicationContext接口,使用的实现类是ClassPathXmlApplicationContext,如果spring的配置文件在我们的文件系统中,则使用它左边这个绿色的实现类。

4.SpringBean管理,XMl的方式(具体实现可见项目中demo2包)

三种实例化Bean的方式

1.使用类构造器实例化(默认无参数)

2.使用静态工厂方法实例化(简单工厂模式)

3.使用实例工厂方法实例化(工厂方法模式)

一般情况下,我们采用第一种方式;当构造非常复杂的对象时,则考虑第二种或者第三种配置方式。

Bean的作用域(具体可见项目中demo3包)

在这里插入图片描述

Bean的生命周期(具体可见项目中demo3包)

在这里插入图片描述

1.instantiate bean对象实例化

2.populate properties封装属性

3.如果Bean实现Bean NameAware执行 setBeanName

4.如果Bean实现Bean’FactoryAware或者ApplicationContextAware设置工厂setBeanFactory或者上下文对象setApplicationContext

5.如果有自定义类实现了BeanPostProcessor接口(后处理Bean),执行postProcessBeforeInitialization

6.如果Bean实现InitializingBean执行afterPropertiesSet

7.调用指定的初始化方法init(),

8.如果有一个自定义类实现了BeanPostProcessor接口(后处理Bean),执行postProcessAfterInitialization

9.执行业务处理方法

10.如果Bean实现了DisposableBean执行destroy

11.调用指定的销毁方法customerDestroy

不用完全记住,重点记住第五步和第八步,后处理Bean:自定义一个类实现BeanPostProcessor接口的方法。

这个后处理bean有什么作用呢?他是在我们整个类的生成的过程中要执行的一个步骤,那么他就可以对我们的类进行增强,即AOP思想。

属性的注入以及构造方法的属性的注入(具体见项目中spring配置文件)
  • set方法的属性注入
  • p名称空间的属性注入
  • SpEL的属性注入
  • 复杂类型的属性注入
5.SpringBean管理,注解方式(具体见项目spring_ioc_annotation)

要想使用注解的方式开发,除了需要spring的基本的四个jar包,还需要spring-aop的jar包。

具体的注解举例:

@Component:相当于@Controller、@Service、@Repository;只不过用后三者的话,代码更加清晰

@Autowired:默认按照类型进行注入

​ ----如果存在两个相同类型的Bean,则按照名称注入

@Autowired注入时可以针对成员变量或者set方法

使用@Qualifier指定注入Bean的名称

使用Qualifier指定Bean名称后,注解Bean必须指定相同的名称

其他的注解(demo2包)

在这里插入图片描述

在这里插入图片描述

Spring的Xml和注解整合开发(见demo3包)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值