maven项目
Dao层一个接口一个实现类
service层一个接口一个实现类,将dao层中的实现类注册到IOC容器里面,在service层的实现类里面定义一个Dao层的bean类
将配置文件里的bean信息删除,去到bookDao的实现类处
加上一个@Component :组件注解
这里就相当于是上面那个bean标签的作用
注意:上面这里名称不写的话,就不能在getbean里面使用名称获取,要使用按类型获取
现在还需要在配置文件做一件事,让它去扫描组件
加上这句话就是扫描位于org.example.dao.impl下的文件 组件-扫描
另外衍生的三个注解功能和 @Component一样,只用于理解
使用Java类代替配置文件,在config目录下新建一个SpringConfig类代替配置文件
在SpringConfig上加上一个@Configuration注解就可以让SpringConfig变成一个配置类,
再加上一个@ComponentScan("org"),扫描org下的所有文件并注册到IOC容器中
现在就可以把原本的配置文件无效化了
新建一个测试类,在里面运行SpringConfig获取IOC,这次试用一个新的对象类
AnnotationConfigApplicationContext :注解开发应用上下文
再把刚刚的配置类放进去,剩下的操作就和之前一样了
按照类型获取两个bean输出,发现是同一个,因为是单例
现在要改成非单例,在BookDao实现类上加上一个@Scope标签
取值两个:
@Scope("singleton") 表示单例,默认是单例
@Scope("prototype") 表示非单例
再次输出就变成非单例了
使用下图的两个注解就可以在初始化和销毁前分别运行init和destroy
同样,这里一般不会执行到销毁阶段,会直接关闭虚拟机,所以要使用关闭钩子手动在关虚拟机前销毁IOC容器,关闭钩子是只在AnnotationConfigApplicationContext才有的
成功执行销毁方法