文章目录
- 基础配置
- 1)基础文件结构(Maven项目创建)
- 一、01_Spring概述_IOC_HelloWorld
- 1.Spring框架的两个核心功能
- 1.1) IOC/DI ,控制反转依赖注入!
- 1.2) AOP,面向切面编程
- 2.IOC的两种模式
- 2.1)配置文件中配置 @Bean
- 2.2)配置文件,组件扫描注解+类注解@Component
- 二、02_JavaBean_JUnit_组件扫描
- 1.JavaBean的概念
- 2.Junit的引入
- 2.1) junit的@Before 和 @After注解
- 3.组件扫描功能@ComponentScan
- 4.Spring提供的多种注解
- 5.自定义组件ID
- 三、03_作用域_Bean生命周期管理
- 1.基于javax.annotation包的注解
- 1.1 @PostContruct
- 1.2 @PreDestroy : 对象销毁时自动执行的注解
- 1.3 示例
- 2.基于Spring的@Bean自带注解
- 2.1 @Bean(intitMethod="open" ,destroyMethod = "close")
- 2.2 示例代码
- 3 @Scope("prototype")的特殊情况
- 四、 04_懒惰初始化_@Import
- 4.1 @Lazy 可以和@Component配合
- 4.2 @Lazy 可以和@Bean配合
- 4.3 @import 多人开发,多配置文件合并
- 总结:
- 1.[MVN地址](https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2)
基础配置
1)基础文件结构(Maven项目创建)
一、01_Spring概述_IOC_HelloWorld
1.Spring框架的两个核心功能
1.1) IOC/DI ,控制反转依赖注入!
1.2) AOP,面向切面编程
2.IOC的两种模式
2.1)配置文件中配置 @Bean
2.2)配置文件,组件扫描注解+类注解@Component
参考二里面的明细3
二、02_JavaBean_JUnit_组件扫描
1.JavaBean的概念
2.Junit的引入
2.1) junit的@Before 和 @After注解
public class TestCase {
AnnotationConfigApplicationContext ctx;
@Before
public void init(){
ctx = new AnnotationConfigApplicationContext(Config.class);
System.out.println("初始化Spring");
}
@After
public void destroy(){
ctx.close();
System.out.println("销毁Spring");
}
@Test
public void testScope(){
Date d= ctx.getBean("myDate", Date.class);
System.out.println(d);
}
}
3.组件扫描功能@ComponentScan
4.Spring提供的多种注解
5.自定义组件ID
实际中很少这么做,会增加出错率
三、03_作用域_Bean生命周期管理
生命周期管理是否需要使用,根据具体业务需求而定;
1.基于javax.annotation包的注解
注意:因为以下注解不属于Spring,属于annotation,所以要单独引入
1.1 @PostContruct
创建对象以后自动执行
1.2 @PreDestroy : 对象销毁时自动执行的注解
关闭容器关闭对象时候执行
1.3 示例
组件代码:
@Component
public class FileLogger03 {
public PrintWriter out;
@PostConstruct
//Spring创建Bean对象后自动执行初始化方法
public void open() throws Exception{
out =new PrintWriter("Demo.text");
System.out.println("打开Demo.text");
}
@PreDestroy
//Spring 容器关闭时销毁对象,自动执行销毁方法
public void close() {
out.close();
System.out.println("关闭Demo.text");
}
}
配置类代码:
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
public class Config {
}
测试类代码:
public class TestCase {
AnnotationConfigApplicationContext ctx;
@Before
public void init(){
ctx = new AnnotationConfigApplicationContext(Config.class);
}
@After
public void destroy(){
ctx.close();
}
@Test
public void testScope(){
FileLogger03 ff= ctx.getBean("fileLogger03",FileLogger03.class);
ff.out.println("aaaaaaa");
ff.out.println("ddddddd");
System.out.println("life test");
}
}
2.基于Spring的@Bean自带注解
2.1 @Bean(intitMethod=“open” ,destroyMethod = “close”)
2.2 示例代码
组件代码:
//配置类采用了@Bean ,所以此处不用再@Component
public class DemoLogger {
public PrintWriter out;
public void open() throws Exception{
out =new PrintWriter("Demo.text");
System.out.println("打开Demo.text");
}
public void close() {
out.close();
System.out.println("关闭Demo.text");
}
}
配置类:
@Configuration
//因为是采用@Bean标注,所以@ComponentScan可以省略
public class Config {
@Bean(initMethod = "open",destroyMethod = "close")
public DemoLogger demoLogger(){
return new DemoLogger();
}
}
测试类:
@Test
public void testLogger(){
DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
gl.out.println("good morning!");
}
3 @Scope(“prototype”)的特殊情况
每次都创建一个对象,Spring为了避免内存泄漏,不会缓存对象的引用,所以Spring关闭时候就无法处理对象的销毁方法,需要手动销毁.
配置类:
@Bean(initMethod = "open",destroyMethod = "close")
@Scope("prototype")
public DemoLogger demoLogger(){
return new DemoLogger();
}
测试类:
@Test
public void testLogger(){
DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
gl.out.println("good morning!");
gl.close(); //因为开启了 @Scope("prototype"),此处需要手动关闭
}
四、 04_懒惰初始化_@Import
4.1 @Lazy 可以和@Component配合
前提组件有@Component,会自动创建;不想创建的话就是加上@Lazy
@Component
@Lazy
public class FileLogger03 {
public PrintWriter out;
@PostConstruct
//Spring创建Bean对象后自动执行初始化方法
public void open() throws Exception{
out =new PrintWriter("Demo.text");
System.out.println("111打开Demo.text");
}
@PreDestroy
//Spring 容器关闭时销毁对象,自动执行销毁方法
public void close() {
out.close();
System.out.println("111关闭Demo.text");
}
}
4.2 @Lazy 可以和@Bean配合
配置中
@Bean
@Lazy
public DemoLogger demoLogger(){
return new DemoLogger();
}
4.3 @import 多人开发,多配置文件合并
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@Import({SysConfig.class})
public class Config {
}