wangjiedadada  

1.原始材料

对象的创建由原来的==使用new关键字在类中主动创建==变成了==从工厂中获取==,而对象的创建过程由工厂内部来实现,

而这个工厂==就是Spring的IOC容器==,也就是以后我们的对象不再自己创建, 而是直接向Spring要,这种思想就是==IOC==


 

IOC( 控制 反转 )是一种设计思想。它的目的是指导我们设计出更加松耦合的程序。(解耦 工厂解耦)

  控制:指的是控制权,现在可以简单理解为对象的创建权限

  反转:指的对象的控制权由程序员在类中主动控制(new)反转到由Spring容器来控制。

2.两个接口

BeanFactory

这是SpringIOC容器的顶级接口,它定义了SpringIOC的最基础的功能,但是其功能比较简单, 一般面向Spring自身使用

BeanFactroy在第一次使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化

ApplicationContext

这是在BeanFactory基础上衍生出的接口,它扩展了BeanFactory的功能,一般面向程序员使用

ApplicationContext是在容器启动时,一次性创建并加载了所有的Bean

==上面两种方式创建的对象都是单例,只是创建对象的时机不同==

3.三个实现类,一个方法

这三个类的作用都是:读取配置文件, 初始化Spring的IOC容器, 不一样的是加载配置文件的位置

    • ClassPathXmlApplicationContext 读取类路径下的xml作为配置文件

    • FileSystemXmlApplicationContext 读取本地目录下的xml作为配置文件

    • AnnotationConfigApplicationContext 读取一个Java类作为配置文件

getBean() 用于从Spring容器中获取Bean对象,参数可以使用三种情况:

    • getBean("id") 使用bean的id从容器中查找对象

    • getBean(Bean.class) 使用bean的class类型从容器中查找对象

    • getBean("id", Bean.class) 使用bean的id 和 class类型从容器中查找对象

4.bean的作用范围

在Spring中,对于bean支持五种作用范围:

    • singleton(默认) 单例模式,即对象只创建一次, 然后一直存在

    • prototype 多例模式,即每次获取bean的时候,IOC 都给我们创建一个新对象

    • request web项目中, Spring创建一个Bean的对象,将对象存入到request域中( 同一个request获取到 的是同一个对象)

    • session web 项目中,Spring创建一个Bean 的对象,将对象存入到session域中

    • globalSession 用于分布式web开发中,创建的实例绑定全局session对象

5.bean的生命周期

单例对象

什么时候创建对象呢?

IOC容器初始化完成后,创建对象

什么时候销毁对象呢?

关闭IOC容器时,销毁对象

多例对象

什么时候创建对象呢?

IOC容器初始化完成后,调用getBean方法时创建对象

什么时候销毁对象呢?

销毁时机不受spring容器管理。由jvm的垃圾回收机制销毁。

 6.依赖注入

依赖注入(Dependency Injection,DI) 其实就是给对象中的属性赋值的过程

依赖注入有两种方式,分别是使用构造函数和set方法。

7.使用到的注解

@Component
用于实例化对象,相当于配置文件中的< bean id="" class=""/>
它支持一个属性value,相当于xml中bean的id。如果不写,默认值为类名的首字母小写
@Controller @Service @Repository
这三个注解的功能跟@Component类似,他们分别标注在不同的层上。
@Controller 标注在表现层的类上
@Service 标注在业务层的类上
@Repository 标注在持久层的类上
推荐使用这三个,当一个类实在不好归属在这三个层上时,再使用@Component

8.使用注解时设置作用范围:

  @Scope用于指定bean的作用范围(单例和多例),相当于配置文件中的< bean scope=""> 

   1 @scope("singleton") 2 @Repository 3 public Class AccountDao{ 4 } 

 

1 @scope("prototype")
2 @Service
3 pubic Class UserServiceImpl implements UserService{
4 }

9.依赖注入

  @autoWired

这个注解表示依赖注入,他可以标注在属性上,也可以标注在方法上,当@Autowired标注在属性上的时候,属性对应的set方法可以省略不写

Spring会在他的IOC容器中按照被标注属性的类型进行寻找
如果找不到,就会报错
如果找到了,而且正好找到了一个,那么就进行依赖注入
如果找到了,但是找到了多个,它会再按照属性名称进行匹配
如果匹配上了就注入
如果匹配不上就报错

 

 

posted on 2021-08-06 16:08  wangjiedadada  阅读(689)  评论(0编辑  收藏  举报