目录
Inversion Of Control 控制反转(在运行时基于反射发现组件类和注册对象的过程)
Dependency Injection 依赖注入(赋值的工程)
Bean/JavaBean 咖啡豆/组成(指的对象/被IoC容器发现后创建的对象)
IOC&DI
Inversion Of Control 控制反转(在运行时基于反射发现组件类和注册对象的过程)
发现:运行时让oC发现组件类/需要被创建对象的类
1.组件类的包层级不能高于启动类,只能小于等于
2.组件类上需要有IoC注解
注册:发现后就会触发注册,注册就是创建对象放入到IoC容器的过程
Dependency Injection 依赖注入(赋值的工程)
注入:在运行时,从IoC容器中找到与指针相匹配的对象赋值给指针的过程4
先有发现再有注册,有了注册才有注入,都是在运行时发生
具有IoC功能的注解:
1.@Controller/@RestController
用于控制器层的发现和注册
2.@Service
用于Service层类的发现和注册
3.@Repository(如果用来MyBatis框架就不会用到这个注解)
用于Dao层类的发现和注册
4.@Component
用于任意一个普通类的发现和注册
5.@MapperScan
用于扫描mapper包,在运行时创建接口的实现类,并注册对象到IoC容器
发现/注册UserController
发现/注册UserServiceImpl
在UserController中注入UserService
什么控制权?
创建对象的控制器 new 构造方法()
为什么要反转?
高内聚低耦合(编程的思想)
耦合=依赖(工程依赖工程,类依赖类)
高耦合:直接依赖了具体的实现类
解耦合:解除高耦合的依赖
Component组件(组成工程的原件,指的是类)
Bean/JavaBean 咖啡豆/组成(指的对象/被IoC容器发现后创建的对象)
IoC&DI的实现方式有3种:
发现-注册-注入
1.基于xml文件实现(框架早期使用)
xml文件写在resource目录中,xml文件可以有多个
2.基于注解实现
3.基于配置类实现
启动类或者任意一个带有@Configuration注解的类都可以是一个配置类
日志管理:
Lombok 三方库提供的注解
在编译时给字节码文件动态生成
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToStrig
@Data=(@Setter+@Getter+@EqualsAndHashCode+@ToStrig)
@Slf4j()(在编译后的字节码文件中会出现一个私有的静态常量)
4j=for java(为Java提供的)
类型是Logger,指针名叫Log,这个就是用来打印日志的对象
需要在哪个类中打印日志。只需要给这个类添加@Slf4j()注解,这个类中就会有一个log指针
在使用log对象打印日志之前,需要先配置打印日志的规则
打印日志的规则:
1.将日志配置文件放在resource目录中
日志配置文件log.xml可以复用,需要了解里面如何配置日志打印规则
2.在application.properties中告诉Lombok框架日志配置文件在哪里
logging.config=classpath:log.xml
步骤总结如下:
1.安装Lombok三方库
2.日志配置文件log.xml
3.设置日志配置文件
4.需要打印日志的类中使用@Slf4J注解
日志级别:
Trace(追踪)<debug(调试)<info(信息)<warn(警告)<error(错误)
设置日志规则:
使用log打印日志来替代System.out.println()
写Demo:
System.out.println()
写项目:
使用log打印
1.Log打印的信息更多
日志打印时间 所在线程 所在类 日志信息
2.Log可以按级别打印日志,可以通过级别控制哪些打印,哪些不打印
3.Log可以打印到控制台,还可以打印到文件
AOP:
面向切面编程 Aspect Oriented Programming
建aop的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
目标方法执行: