IOC与DI的区别?
IOC:控制反转(Inversion of Control是面向对象的一种设计原则,可以用来降低计算机之间的耦合度,其中最常见的是依赖注入).是实现的目标
DI:是实现IOC的一种手段Dependency Injection ,依赖注入简称DI
DL:依赖查找 Dependency Lookup,使用场景,数据库配置。
Dependency Injection依赖注入
依赖:需要、基于。
注入:进行解耦,需要的时候再进行使用
spring实现IOC的思路和方法
spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个B.class的属性,那么我们可以理解为A依赖了B。既然我们在类中已经定义了他们之间的依赖关系那么为什么还需要在配置文件中去描述和定义呢?
spring实现IOC的思路大致可以拆分成3点
1应用程序中提供类,提供依赖关系(属性或者构造方法)
2把需要交给容器管理的对象通过配置信息告诉容器(xml、annotation,javaconfig)
3把各个类之间的依赖关系通过配置信息告诉容器
配置这些信息的方法有三种分别是xml,annotation和javaconfig
维护的过程称为自动注入,自动注入的方法有两种构造方法和setter
自动注入的值可以是对象,数组,map,list和常量比如字符串整形等
spring编程的风格
schemal-based----基于模型---xml
annotation-based---基于注解--annotation
java-based---基于java-java Configuration
spring的注入方法
构造方法
set方法
spring3中提供了接口注入,但是在spring4中被取消了,太不人性化。已经取消了
取消的原因:有了set方式注入,接口注入就多次一举了,并且耦合度也提高了 https://blog.csdn.net/xuebing1995/article/details/75389143;
spring中注解@component与@service、@controller的区别
官网中有详细解释:Spring提供进一步典型化注解:
@Component
,@Service
,和 @Controller
。@Component
是任何Spring管理组件的通用构造型。@Repository
,@Service
和,@Controller
是@Component
更具体的用例的专业化(分别在持久性,服务和表示层)。因此,您可以来注解你的组件类有 @Component
,但是,通过与注解它们@Repository
,@Service
或者@Controller
,你的类能更好地被工具处理,或与切面进行关联。例如,这些刻板印象注释成为切入点的理想目标。@Repository
,@Service
并且@Controller
还可以在Spring Framework的未来版本中携带其他语义。因此,如果您在使用之间进行选择@Component
或者@Service
对于您的服务层,@Service
显然是更好的选择。同样,如前所述,@Repository
已经支持将其作为持久层中自动异常转换的标记。spring中的@autowirter与@resource的区别
autowriter是默认的byType方式,如果根据byType没有找到,会根据byName去查找。如果spring容器中存在多个此类型的类则会根据byName查找,byName是根据属性的名字去查找对应的类。如果根据属性名字没有查找到相关则会报错,提示存在多个相同类型的类。
resource是默认的byName方式,是根据属性的名字创建代理类中的方法。切记不是set方式
什么是byType?就是spring基于类的类型通过上下文查找对象依赖。(个人理解,若理解错误请及时指出)
什么是byName?就是spring基于方法名字查找对象依赖中的方法。(个人理解,若理解错误请及时指出)
扩展:根据官网所说,我们可以重写BeanNameGenerator类,并重新设置spring中查找上下文中的依赖关系的命名规范。
bean的作用域
此点本人再开发工作过程中确实遇到过,简单说一下经历。项目是改造项目,由很老的项目改造成springMVC项目,项目中的架构师没有处理bean的作用域,默认的(也就是singleton),本人在工作过程中遇到签单逻辑的时候,服务启动后,第一次签单成功,但是第二次之后总是失败,于是就打了断点,发现进入逻辑方法后,所有的全局属性都是有值的(刚刚进入方法,还没赋值),结果查找问题,发现bean的作用于问题导致。
singleton、prototype、request、session、application、websocket