控制反转,一切对象交给Spring来创建于管理,将创建与使用对象的代码进行分离作用。实现代码的解耦。
因为以前的对象创建都是在程序的创建,管理。这是所谓的正转,如今的对象的创建是在IOC中,在 IOC Container中获取。这就是反转。
DI,denpendecy inject。依赖注入,在应用程序中注入依赖对象。设置对象的依赖以及对象的依赖关系。
IOC 与DI 本质上是一样的,IOC 是设计思想,DI是实现方式。
实现了高内聚,低耦合的思路,不用在应用程序中创建对象,一切对象由IOC容器来管理,从容器中获取。
@Autowire
自动配置,Spring内部的注解。默认是按照类型匹配byType,如果要按照名称匹配byName。需要搭配另一个注解@Qutifity。如果这是找不到对象会抛出异常,为了不抛出异常,我们可以给注解加参数(request = false).
@Resouce
Java注解,默认按照名称来匹配byName。
@Inject
Java注解,与@Autowire 一样,默认按照类型进行匹配。
Bean 是存储在IOC 容器中的对象
● @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
● @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
● @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
● @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
● @Component 注解作用于类,而@Bean注解作用于方法。
● @Component通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。
● @Bean 注解比 @Component 注解的自定义性更强,有些地方我们只能通过 @Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring容器时,则只能通过 @Bean来实现。
@Bean注解使用示例:
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
AOP,Aspect Oriented programming,面向切面编程,主要为起到代码解耦、解决重复代码的问题,比如插入日志。事务管理、防止入侵式编程。可以灵活的使用,关联知识pointCut切点,Arount环绕通知等等。
连接点:AOP要执行什么类型,比如Method,class
切入点:AOP的执行集合,切入什么执行的方法
通知类型:前置通知、后置通知,环绕通知(最强大),异常通知,最终通知。要选择最适合的,而不是最强大。
切面:AOP具体要执行什么。
AOP 是动态织入,基于动态代理,动态代理是使用JDK(proxy实现),或者cglib来实现。
Aspectj 是基于静态的,在编译时期织入。
AOP 与 Aspectj相辅相成,AOP更简单,容易,但是只能实现简单的切面编程。
Aspect 更专业,专业的AOP工具,难学,但能实现更加复杂的编程。
JDK动态代理
定义接口
定义实现接口的方法
定义切面类,使用注解。@Aspect,@PointCut, @Around。等来实现
Gclib
定义类方法
定义切面类,使用注解。@Aspect,@PointCut,@Around。等来实现
注意点
● 定义切面的规则:* 表示通配符,() 表示没有参数的方法,(…)表示有一个或多个参数的方法。
写作不易,有所收获,点个赞就行,我是球球,Java程序员,24届毕业生。