Spring杂谈一

Spring是什么?

  • Spring是一个产品,里面有很多项目,IOC,AOP是里面的内容,还有MVC、DAO support,tansactions、SpringWebFlux…
    在这里插入图片描述

IOC

  • Inversion of Control控制反转,面试对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度,其中最常见的方式为依赖注入(Dependency Injection),还有依赖查找(Dependency Lookup)。IOC可称为目标,DI是实现IOC的一种技术手段。

DL依赖查找

  • 对象并不是由new创建的,而是由一个程序根据名字找到对应的对象赋值,例如JNDI:DataSource da = (DataSource)ctx.lookup(“java:comp/xxxxx”);

为什么用springIOC?

  • 在日常程序开发过程当中,我们推荐面向抽象编程,面向抽象编程会产生类的依赖,管理这些依赖会非常麻烦,假如一类业务需要加事务,我们不把对象交给Spring管理,那么我们就要一个个对象加事务,但是如果我们把对象交给容器管理,我们只需产生添加事务的代理类,便可实现对象事务的添加。 当我们有了一个管理对象的容器之后,类的产生过程也交给了容器,容器在创建对象前后和赋值的时候进行一些操作。

spring实现IOC的思路和方法

  • spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个B.class的属性,那么我们可以理解为A依赖了B。
    spring实现IOC的思路大致可以拆分成3点
  1. 应用程序中提供类,提供依赖关系(属性或者构造方法)
  2. 把需要交给容器管理的对象通过配置信息告诉容器(xml、annotation,javaconfig)
  3. 把各个类之间的依赖关系通过配置信息告诉容器

spring编程的风格

  1. schemal-based-------xml
    在这里插入图片描述
    在这里插入图片描述
  2. annotation-based-----annotation
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210322213407322.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5Nzg2Nzgx,size_16,color_FFFFFF,t_70
  3. java-based----java Configuration
    在这里插入图片描述
    在代码中提供依赖关系,交给容器维护,容器自动把对象给我们,这个过程称为注入,注入有两种方法:
  • 构造方法
    在这里插入图片描述
  • setter方法
    在这里插入图片描述
    spring注入(字符串、数组等)文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-properties-detailed

在这里插入图片描述
在这里插入图片描述
自动装配

  • IOC的注入有两个地方需要提供依赖关系,一是类的定义中,二是在spring的配置中需要去描述。自动装配则把第二个取消了,即我们仅仅需要在类中提供依赖,继而把对象交给容器管理即可完成注入。减少了xml的配置,自动更新配置。
    在这里插入图片描述
    在这里插入图片描述
    no:不使用自动装配
    byName:bean的name是否存在,不存在则等于id。找到对应类的方法中的set方法去掉set将大写转小写。
    byType:扫描类的时候,发现类中有依赖,根据依赖类型容器赋值。但是如果存在同一个类型的两个配置,会出现报错。
    constructor:根据构造方法
    声明方式:全局配置在beans上添加:default-autowire=“byType/byName”,单独配置在bean上添加autowire=“byType/byName”

@Component可以注解到任意Spring管理的类。其他的管理类的注解中有一个@Component。(Spring文档中说明未来可能会有不一样的语义)

@Autowired默认为byType
@Resource默认为ByName( 根据属性名,xml的根据setter方法名)

Bean作用域
在这里插入图片描述
单例和原型
使用:@Scope(“singleton/prototype”)
问题:单例对象依赖了原型对象,单例对象只实例化一次,里面的依赖的原型对象只有一次机会设置依赖,所以使用里面的原型对象,都是指向同一个对象。
解决方法一:
类实现ApplicationContextAware接口
在这里插入图片描述
解决方法二:
@Lookup
在这里插入图片描述

创作不易,转载请注明出处!

1. spring杂谈[原创] 1.1 Spring事务处理时自我调用的解决方案及些实现方式的风险 1.2 我对AOP的理解 1.3 Spring开闭原则的表现-BeanPostProcessor的扩展点-1 1.4 我对IoC/DI的理解 1.5 SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结 1.6 »Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) 1.7 Spring开闭原则的表现-BeanPostProcessor扩展点-2 1.8 Spring3.1 对Bean Validation规范的新支持(方法级别验证) 1.9 Spring对事务管理的支持的发展历程(基础篇) 1.10 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。 1.11 在spring中获取代理对象代理的目标对象工具类 1.12 如何为spring代理类设置属性值 1.13 我对SpringDAO层支持的总结 1.14 我对SpringDAO层支持的总结 1.15 我对SpringDAO层支持的总结 1.16 我对Spring 容器管理事务支持的总结 1.17 我对Spring 容器管理事务支持的总结 1.18 不重复配置——利用Spring通用化配置 1.19 @Value注入Properties 错误的使用案例 1.20 @Value注入Properties 使用错误的案例 1.21 扩展SpringMVC以支持更精准的数据绑定 1.22 扩展SpringMVC以支持更精准的数据绑定1 1.23 扩展SpringMVC以支持绑定JSON格式的请求参数 1.24 扩展SpringMVC以支持绑定JSON格式的请求参数 1.25 在应用层通过spring特性解决数据库读写分离 1.26 context:component-scan扫描使用上的容易忽略的use-default-filters 1.27 idea内嵌jetty运行springmvc项目报ConversionFailedException 1.28 springmvc 3.2 @MatrixVariable注解 1.29 spring3.2 带matrix变量的URL匹配问题 1.30 Shiro+Struts2+Spring3 加上@RequiresPermissions 后@Autowired失效 1.31 Spring事务不起作用 问题汇总 1.32 Spring3 Web MVC下的数据类型转换(第篇)——《跟我学Spring3 Web MVC》抢先看 1.33 Spring 注入集合类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值