Spring容器和注解
需要学习:spring特征IoC AOP(事务处理) 框架基本都能整合
Spring Framwork:最基础的
先学习核心容器:IoC/DI
IoC容器控制反转:以前需要自己一步步做,现在又外部直接给你提供管理Service和Dao,在程序中不主动去new对象,转换为由外部提供对象,称为控制反转:目的解耦 外部:IoC
IoC容器负责对象的创建、初始化等一系列工作,被创建或者被管理的对象在IoC容器中称为Bean
DI:依赖注入 在容器中建立bean和bean之间依赖关系的整个过程
IoC案例 : 控制bean的作用范围,在bean中使用 scope默认的singleton是单例的 prototype非单例的
1.首先需要导入spring的坐标spring-context
2.配置bean id是给bean起名字 class指向bean的定义类型

3.获取IoC容器,获取bean

4.配置DI,property name是在类中实例化对象之前写的那个东西,ref是指向的bean

静态工厂配置bean在《bean》后面加上factory-mrthod指明是哪一个方法
实例化工厂配置bean需要先把工厂bean造出来然后写一个bean<>里面是 id和factory-method 和 factory-bean指向那个工厂bean
工厂模式配置bean:

![]()
bean生命周期:

在<>bean里面有一个inti-method和一个destory-method 初始化和结束,想要看到destory方法执行需要关闭容器,关闭容器不能使用applicationContext需要使用后面实例化那个ClassPathXmlApplicationContext.close 暴力关闭容器
初始化和结束,还可以实现两个接口InitializingBean和DisposableBean
还有一个关闭方法就是设置一个勾子 告诉jvm别忘了关闭我的容器 .registShutDownHook();这句话放在哪里都可以
其实这两种方法都不用是Tomcat去做的后面学习
依赖注入:
向类中传递数据:setter方法或者构造方法
注入的类型:引用类型 简单类型(基本类型和String)
Setter方法注入引用类型就是直接配置, 简单类型就是不写成ref写value值 都是双引号包括内部会自动识别类型

构造器注入:就是写一个构造函数把引用类型传递进去,在配置中把property换成constructor-arg name写形参 ref写引用的类型 简单类型一样value
兼容性的方案,为了避免形参会改变,所以可以用type属性来规定,为了解决有两个一样的参数类型,可以用index来指向从0开始
注入方式的选择:
强制依赖,必须要的使用构造器方法
可选择的用setter
自己开发的模块推荐使用setter
spring依赖自动装配:添加autowire后面选择方式,不过需要set方法
只能对引用类型自动装配,简单类型不可以
使用byType的时候必须保障容器中相同类型的bean唯一

数组、list、set、map、properties 格式 set自动去除重复


spring加载 properties文件:

1.开启context命名空间:然后使用下面的context引入
取值的时候就可以用 ${jdbc.username}这样的方式取值 需要的类创建bean 在propert的时候value里面用${jdbc.username}
context里面后面加上system-properties-mode="never"就是不加载系统的
多个properties文件最好的方式就是 classpath*:*.proerpties


容器:
加载容器的方法两种:用第一种

获取bean的方式

注解开发:
哪个实现类需要加bean就在类上面加@Component("bookDao"),在配置文件里面加上扫描<context:component-scan base-package="com.songyue"/>
后面可以写全路径,也可以写到com可以随便,如果@Component这样写的话,后面获取bean就需要按照类型获取bean,getBean(***.class)
作用是一样的
纯注解开发:写一个注解类代替配置文件,实现类还是那样写,获取配置文件的地方需要改一下,扫描包的时候需要扫描多个使用大括号


设置单利模式@scope 初始化@PostConstruct 终结@PreDestroy 自动装配@Autowired就不需要set方法了
@Qualifier有相同类型的bean就用这个后面加上名字,不过需要和自动装配一起使用 简单类型的注入@value
@PropertySource("")注入property等文件的时候在注解类里面写这个注解,然后取值在value里面写${,多个文件的时候使用数组的方式
第三方bean就写一个方法用来接受这个bean,然后方法加注解@bean,然后再注解类加上@import(三方bean.class)多个也是数组的方式
简单类型注入就是@value 引用类型就是在里面给一个形参比如dao或者service,然后再注解类里面需要扫描这个包


浙公网安备 33010602011771号