美文网首页
Spring学习(一)

Spring学习(一)

作者: 花开此时海 | 来源:发表于2020-12-19 22:25 被阅读0次

spring框架核心技术的两大概念之一:

        IOC(Inversion of Control)即控制反转,是一种非常优秀的设计原则,能够有效的降低对象之间的耦合度,能实现IOC的方式有很多种,而spring实现IOC的方式是DI(Dependency Injection)依赖注入。

        在了解IOC之前,首先我们来看下什么是依赖,在面向对象方法设计程序的开发过程中,我们通常会经过很多的对象来共同实现一个业务逻辑,而这个过程中经常会出现某对象的使用必须先创建另外一个对象,这即为依赖关系,而这些对象之间的耦合关系是难以避免的,随着业务的复杂度的提升以及应用的规模变大,对象与对象之前的依赖关系也越发的复杂,IOC的概念顺运而生。

        IOC的概念是通过一个第三方的实现来负责对象与对象之间的依赖关系,非IOC获得依赖对象是由自身控制的,而IOC则是被IOC实现进行依赖对象的注入,这也是控制反转,即获得依赖对象的过程被反转。

        IOC的实现方式最常见的是DI依赖注入方式,除此之外还有DL依赖查找(Dependency Lookup)的方式,JNDI便是通过DL实现的。

        spring框架的IOC的主要实现思路为:

            应用程序中提供类并通过构造方法或者是属性提供依赖关系,把需要交给容器管理的对象通过xml配置或注解或javaconfiguration方式告诉spring容器,并将对象交给spring容器管理,spring容器通过自动装配的方式来解析程序类之前的依赖关系并注入到对象中。

        spring通过自动装配实现自动注入,官网提供的配置有四种:

         1 no 即为不使用自动注入

         2 byName 通过对象名称实现自动注入

         3 byType 通过对象的类型实现自动注入

          4 构造函数 通过对象的构造方法实现自动注入

        在我们日常编码中,我们使用自动注入最常用的方式是通过注解,而最关键的注解即为@Autowired,同样可以实现注入的还有@Resource注解,两者的区别在于 Autowired默认是通过byType进行注入的,如果type没找到则通过byName进行注入,而Resource则是通过byName进行注入的。

        除此之外,spring中@Component用于注解所有类标注该类为spring的一个bean,而@Service,@Controller,@Repository同样能用于声明bean,目前暂无区别,spring官方文档则宣称后续可能会有其他语意。

        springBean的作用域有七种,single,prototype,request,session,application,websocket,spring默认的作用域都是single单例模式,而在单例bean中依赖原型bean,该原型bean的原型注解会失去效果,因为单例模式只会实现一次,因此虽然依赖的bean声明是原型bean,但是并无法达到原型的效果,spring官方文档提供了解决方案,第一种是通过实现ApplicationContextAware接口并注入一个spring容器的ApplicationContext,通过ApplicationContext来获取原型bean,第二种则是通过@Lookup注解来实现,通过一个抽象的bean或者注解在一个get方法上来实现单例bean中原型bean的原型效果. 

        springBean的生命周期回调方法,spring提供了三个方法来实现springBean的生命周期的初始化回调,@init  @PostConstruct,已经实现接口InitializingBean 来调用的afterPropertiesSet方法。执行顺序为:构造函数->postConstrunct()->afterPropertiesSet()->init().

相关文章

网友评论

      本文标题:Spring学习(一)

      本文链接:https://www.haomeiwen.com/subject/eikcnktx.html